从字节码角度分析a++相关题目

网友投稿 501 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小时内删除侵权内容。

上一篇:【机器学习】朴素贝叶斯代码练习
下一篇:Sql解锁 数据库死锁检测(sql解锁scott)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~