从JVM的角度看JAVA代码1

来源:互联网 发布:小明看看地址永久域名 编辑:程序博客网 时间:2024/05/22 17:40

JVM的角度看JAVA代码1

    从JVM指令的角度来分析++,--问题可以分析的非常透彻,这里给出两个案例。通过这两个案例就能知道JAVA中前++和后++的原理了,同时也可以推论出--的情况。


public class JavaSampleAppend {public static void main(String []args) {int i = 1;i = (i++) + (++i);System.out.println(i);}}/*  0:   iconst_1// 将int类型的常量值1推送到栈顶 1  1:   istore_1// 将栈顶抛出的数据赋值给第2个slot所在的int类型的本地变量中 1  2:   iload_1// 将第2个slot所在的int类型本地变量推送到栈顶 1  3:   iinc    1, 1 // 将第2个slot所在的int类型的本地变量自加一2  6:   iinc    1, 1 // 将第2个slot所在的int类型的本地变量自加一3  9:   iload_1// 将第2个slot所在的int类型本地变量推送到栈顶 3  10:  iadd// 将栈顶变量和第二个变量相加,然后将结果放回栈顶 4  11:  istore_1// 将栈顶抛出的数据赋值给第2个slot所在的int类型的本地变量中 4// 也就是说输出为4  12:  getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;  15:  iload_1  16:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V  19:  return*/


public class JavaSampleAppend {public static void main(String []args) {int i = 1;i = (i++) + (++i) + (i++);System.out.println(i);}}/*0:   iconst_1 // 将int类型的常量值1推送到栈顶 11:   istore_1 // 将栈顶抛出的数据赋值给第2个slot所在的int类型的本地变量中 12:   iload_1  // 将第2个slot所在的int类型本地变量推送到栈顶 13:   iinc    1, 1 // 将第2个slot所在的int类型的本地变量自加一26:   iinc    1, 1 // 将第2个slot所在的int类型的本地变量自加一39:   iload_1// 将第2个slot所在的int类型本地变量推送到栈顶 310:  iadd // 将栈顶变量和第二个变量相加,然后将结果放回栈顶 411:  iload_1 // 将第2个slot所在的int类型本地变量推送到栈顶 312:  iinc    1, 1 // 将第2个slot所在的int类型的本地变量自加一415:  iadd// 将栈顶变量和第二个变量相加,然后将结果放回栈顶 716:  istore_1// 将栈顶抛出的数据赋值给第2个slot所在的int类型的本地变量中 7// 也就是说输出为717:  getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;20:  iload_121:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V24:  return*/


0 0
原创粉丝点击