Как void методы выталкиваются из стека вызовов? - PullRequest
4 голосов
/ 06 января 2020

Это может показаться глупым вопросом. Я пробовал разные ресурсы, чтобы понять, как метод void извлекается из стека вызовов. Я не могу понять это, Ищу помощи. Заранее спасибо. Простой пример -

public static void main(String args[]){
 int sum = sum(2,3);
 System.out.println(sum);
}
public static int sum(int first, int second){
   return first + second;
}

Так что для вышеприведенного примера стек вызовов будет выделять два кадра стека, содержащих детали вызовов методов, как показано ниже - enter image description here

1 Ответ

3 голосов
/ 06 января 2020

Из Спецификация виртуальной машины Java® - Java SE 8 Edition [2.11.8] :

... возврат Инструкция используется для возврата из методов, объявленных как void, методов инициализации экземпляра и методов инициализации класса или интерфейса.

Таким образом, байт-код для двух следующих методов идентичен (при просмотре с BCV ), а именно одной инструкции return:

public void test() {
    return;
}

public void test() {
}
...