void方法如何从调用栈中弹出?

5

这可能是一个愚蠢的问题。我尝试了不同的资源来理解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;
}

因此,对于上述例子,调用堆栈将分配两个包含以下方法调用详细信息的堆栈帧 -
在此输入图片描述

11
它们遵循与非空方法相同的方法。只需将void方法视为在结尾处具有return;即可。它们仍然具有返回语句,只是隐式的。因此,它们以相同的方式从堆栈中弹出。 - Matthew S.
如果我们放置了一个明确的返回语句,那么这是有意义的。我应该假设存在一个返回语句吗? - Ashutosh
3
编译后的字节码中确实包含一个 return 指令。 - Sean Bright
@SeanBright 出于好奇,我们有什么方法可以确保它? - Ashutosh
你可以查看字节码。有一些工具可以做到这一点,大多数集成开发环境都有某种形式的字节码查看器。 - Sean Bright
谢谢@SeanBright,我一定会检查的。 - Ashutosh
1个回答

4

来自Java®虚拟机规范-Java SE 8版【2.11.8】

……return指令用于从声明为void、实例初始化方法和类或接口初始化方法中返回。

因此,以下两种方法的字节码是相同的(使用BCV查看),即单个return指令:

public void test() {
    return;
}

public void test() {
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接