不同类型返回值对应的指令
2025年09月21日
不同类型返回值对应的指令
与读写局部变量表和操作数栈一样,方法返回指令也对应有多条指令,每种基本数据类型对应一条指令,引用类型对应areturn指令,如表3-30所示。
表3-30 方法返回指令

return指令用于无返回值方法,在java代码中,void方法我们可能不会写return,但编译器会自动加上return指令。以返回值为int、long基本数据类型为例,对应java代码如下。
public static int getInt(){ return 1000000000; } public static long getLong(){ return 1000000000000000000L; }
使用javap命令输出这两个方法的字节码如下。
public static int getInt(); descriptor: ()I Code: 0: ldc #2 // int 1000000000 2: ireturn public static long getLong(); descriptor: ()J Code: 0: ldc2_w #3 // long 1000000000000000000l 3: lreturn
验证返回值类型为引用类型时使用的返回指令为areturn,代码如下。
public static User getObject(){ return new User(); } public static int[] getArray(){ int[] array = new int[]{}; return array; }
使用javap查看编译后的字节码如下。
public static com.wujiuye.asmbytecode.book.third.model.User getObject(); descriptor: ()Lcom/wujiuye/asmbytecode/book/third/model/User; Code: 0: new #5 // class com/wujiuye/asmbytecode/book/third/model/User 3: dup 4: invokespecial #6 // Method com/wujiuye/asmbytecode/book/third/model/User."<init>":()V 7: areturn public static int[] getArray(); descriptor: ()[I Code: 0: iconst_0 1: newarray int 3: astore_0 4: aload_0 5: areturn
从该例子可以看出,无论是数组还是对象,都是使用areturn指令。