Что выведет код 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 ошибок.