Программа напечатает 15. Значение long передаётся по значению через a, b, c и d, а println вызывается один раз в последнем методе.
class StackTask {
Программа напечатает 15. Значение long передаётся по значению через a, b, c и d, а println вызывается один раз в последнем методе.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
class StackTask {
public static void main(String[] args) {
a(15);
}
public static void a(long item) {
b(item);
}
public static void b(long item) {
c(item);
}
public static void c(long item) {
d(item);
}
public static void d(long item) {
System.out.println(item);
}
}
Ответ
Программа напечатает 15. Значение long передаётся по значению через a, b, c и d, а println вызывается один раз в последнем методе.
В абстрактной модели JVM каждый вызов имеет собственный stack frame с локальными переменными и стеком операндов. long занимает две позиции локальных переменных. После возврата кадры снимаются в обратном порядке. JIT может встроить методы и изменить фактическое размещение данных, поэтому по исходнику нельзя точно посчитать физический размер native-стека.