JS 与 trick 代码的运用及解析全攻略
604
2022-09-06
从字节码角度分析a++相关题目
源码:
package cn.itcast.jvm.t3.bytecode;/*** 从字节码角度分析 a++ 相关题目*/public class Demo3_2 { public static void main(String[] args) { int a = 10; int b = a++ + ++a + a--; System.out.println(a); System.out.println(b); }}
结果为34,11。
分析:
iinc 指令是直接在局部变量 slot 上进行运算 a++ 和 ++a 的区别是先执行 iload 还是 先执行 iinc
字节码:
public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: (0x0009) ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=3, args_size=1 0: bipush 10 //10入操作数栈 2: istore_1 //从操作数栈的栈顶获取一个值赋值到局部变量表的1号位置,对应a=10。 3: iload_1 //将局部变量表的1号位置的值加载到操作数栈中 4: iinc 1, 1 //局部变量表的1号位置的值,加一次1。3和4对应a++ 7: iinc 1, 1 //7和10对应++a。 10: iload_1 11: iadd 12: iload_1 13: iinc 1, -1 16: iadd 17: istore_2 21: iload_1 22: invokevirtual #3 // Method java/io/PrintStream.println:(I)V 25: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 28: iload_2 29: invokevirtual #3 // Method java/io/PrintStream.println:(I)V 32: return LineNumberTable: line 8: 0 line 9: 3 line 10: 18 line 11: 25 line 12: 32 LocalVariableTable: Start Length Slot Name Signature 0 33 0 args [Ljava/lang/String; 3 30 1 a I 18 15 2 b I
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~