zoukankan      html  css  js  c++  java
  • jvm指令解释i = i++ + i++ + i++ + ++i;等于多少


    public class Test4 {

      public static void main(String[] args) {
        int i = 0;
        i = i++ + i++ + i++ + ++i;
      }
    }

    结果为7,下面是javap dump出来的JVM指令集,后面附上执行说明,

    0: iconst_0 //把0压入操作栈顶
    1: istore_1 //i = 0;
    2: iload_1 //把i的值压入栈顶
    3: iinc 1, 1 //i=1 此时局部变量i值等于1
    6: istore_2 //a=0
    7: iload_1 //把i=1压入栈顶
    8: iinc 1, 1 //i=2 此时全局变量i=2
    11: istore_3 //b=1
    12: iload_1 //把i=2压入栈顶
    13: iinc 1, 1 //i=3 此时全局变量i=3
    16: istore 4 //c=2
    18: iinc 1, 1 //i=4 此时全局变量i=4
    21: iload_1 //把i=4 压入栈顶
    22: istore 5 //d=4;
    24: iload_2 //把a=0 压入栈顶
    25: iload_3 //把b=1压入栈顶
    26: iadd //加法 0+1 =1
    27: iload 4 //把c=2压入栈顶
    29: iadd //加法1+2=3
    30: iload 5 //把d=4压入栈顶
    32: iadd //加法3+4=7
    33: istore_1 //把7存到第一个局部变量 i=7
    34: return

    附局部变量表,

    Slot Name
    0 args
    1 i
    2 a
    3 b
    4 c
    5 d

  • 相关阅读:
    Java数据结构之栈(Stack)
    Java数据结构之单向环形链表(解决Josephu约瑟夫环问题)
    Java数据结构之双向链表
    zookeeper:JavaApi操作节点
    zookeeper:3
    单例模式
    zookeeper:2
    架构版本
    zookeeper:1
    Java反射
  • 原文地址:https://www.cnblogs.com/easylifesh/p/3541984.html
Copyright © 2011-2022 走看看