Вывод: 111 333 333. Локальная global получает строку 333, поле this.global остаётся 111, а parse возвращает целое 333.
Что вернет этот код
Вывод: 111 333 333. Локальная global получает строку 333, поле this.global остаётся 111, а parse возвращает целое 333.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
public class ATest {
String global = "111";
public int parse(String arg) {
int value = 0;
try {
String global = arg; // Shadowing the instance variable
value = Integer.parseInt(global); // Parsing the local variable
} catch (Exception e) {
System.out.println(e.getClass()); // Print exception class
}
System.out.print(this.global + " " + value + " "); // Accessing instance variable using 'this'
return value;
}
public static void main(String[] args) {
ATest ct = new ATest();
System.out.print(ct.parse("333")); // Calling parse method
}
}
Ответ
Вывод: 111 333 333. Локальная global получает строку 333, поле this.global остаётся 111, а parse возвращает целое 333.
Локальная переменная затеняет поле только внутри своего блока. Integer.parseInt успешно преобразует аргумент, поэтому catch не выполняется. Внутренний print печатает 111 333 с последним пробелом, внешний print допечатывает возвращённое 333. Перевода строки нет. Для изменения поля понадобилось бы присваивание this.global, которого в коде нет.