Какое из следующих утверждений правильно описывает поведение этой программы?
Anonymous Quiz
39%
false
38%
true
13%
ClassCastException во время запуска
4%
Ошибка времени компиляции
5%
Узнать ответ
🤔8
Java: Короткая задача
Задача:
Что выведет программа и почему?
Разбор:
Блок finally всегда выполняется, даже если есть return в try.
Когда JVM встречает return 1;, она сохраняет значение для возврата.
Затем выполняет finally.
В finally есть новый return 2; — он перезаписывает сохранённый результат.
👉 Поэтому вернётся 2, а не 1.
Полезно знать:
Такое поведение часто ломает логику при работе с ресурсами - finally может изменить или "затереть" возвращаемое значение.
Лучше не использовать return внутри finally вообще.
Задача:
Что выведет программа и почему?
public class Tricky {
public static void main(String[] args) {
System.out.println(getValue());
}
static int getValue() {
try {
return 1;
} finally {
return 2;
}
}
}
Разбор:
Блок finally всегда выполняется, даже если есть return в try.
Когда JVM встречает return 1;, она сохраняет значение для возврата.
Затем выполняет finally.
В finally есть новый return 2; — он перезаписывает сохранённый результат.
👉 Поэтому вернётся 2, а не 1.
Полезно знать:
Такое поведение часто ломает логику при работе с ресурсами - finally может изменить или "затереть" возвращаемое значение.
Лучше не использовать return внутри finally вообще.
👍13🤔5
# Хитрая задачка на Java: не то, чем кажется
Внимательно изучите следующий код:
Вопрос:
Что напечатает эта программа? Обоснуйте каждый вывод, опираясь на спецификацию Java и особенности работы с пулом строк, кэшированием обёрток и автоупаковкой.
Внимательно изучите следующий код:
public class WhatTheJava {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello").intern();
System.out.println(s1 == s2); // (1)
System.out.println(s1 == s3); // (2)
System.out.println(s1 == s4); // (3)
System.out.println(s3 == s4); // (4)
Integer i1 = 1000;
Integer i2 = 1000;
Integer i3 = 100;
Integer i4 = 100;
System.out.println(i1 == i2); // (5)
System.out.println(i3 == i4); // (6)
Boolean b1 = true;
Boolean b2 = true;
Boolean b3 = Boolean.valueOf("true");
Boolean b4 = new Boolean(true);
System.out.println(b1 == b2); // (7)
System.out.println(b1 == b3); // (8)
System.out.println(b1 == b4); // (9)
}
}
Вопрос:
Что напечатает эта программа? Обоснуйте каждый вывод, опираясь на спецификацию Java и особенности работы с пулом строк, кэшированием обёрток и автоупаковкой.
❤3