Что выведет код Middle Исключения спрашивают часто обновлено

Что выведет: finally меняет переменную после return

Вопрос

Что выведет программа (Java 21)? Каждый вывод println с новой строки.

import java.util.*;

public class Main {
    static int num() {
        int x = 1;
        try {
            return x;
        } finally {
            x = 2;
        }
    }
    static List<String> list() {
        List<String> l = new ArrayList<>();
        try {
            l.add("try");
            return l;
        } finally {
            l.add("finally");
        }
    }
    public static void main(String[] args) {
        System.out.println(num());
        System.out.println(list());
    }
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 1, [try, finally]. return x вычисляет значение 1 и запоминает его до выполнения finally, поэтому присваивание x = 2 результат не меняет.

Что выведет

1
[try, finally]

Разбор

return x вычисляет значение 1 и запоминает его до выполнения finally, поэтому присваивание x = 2 результат не меняет. Со списком возвращается ссылка, а finally меняет сам объект: изменение видно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.