- public static void main(String[] args){
- int j=0;
- j=j++;
- j=++j;
- }
- /* 字节码分析:
- public static void main();
- Signature: ()V
- LineNumberTable:
- line 3: 0
- line 4: 2
- line 5: 7
- line 6: 12
- Code:
- Stack=1, Locals=1, Args_size=0
-
- 0: iconst_0//将0放入栈顶,
- 1: istore_0//将栈顶的0放到局部变量0中,即j
- //以上即是int j=0;
- 2: iload_0//将变量0的值放到栈顶
- 3: iinc 0, 1//将变量0的值加1,并放回变量0中,即j中,此时j为1
- 6: istore_0//将栈顶的数值拿下来放到变量0中,即把0放到j里,此时j=0
- //以上即是j=j++;
- 7: iinc 0, 1//将变量0的值加1,并放回变量0中,即j中,此时j为1
- 10: iload_0//将变量0的值放到栈顶,此时栈顶值为1
- 11: istore_0//将栈顶的数值拿下来放到变量0中,即把1放到j里,此时j=1
- //以上即是j=++j;
- 12: return
- LineNumberTable:
- line 3: 0
- line 4: 2
- line 5: 7
- line 6: 12
- //从以上可以看出,j=j++;先将j的值临时存储,再对j运算加一,然后取出临时存储的值,赋给表达式左边的j,所以最后j还是0
- //j=++j;是先对j进行运算,然后把j的值临时存储,再取出来赋给表达式左边的j,所以j最后是加一后的值。
复制代码 |