美文网首页
Java:int a=0;a=a++;问:a=?

Java:int a=0;a=a++;问:a=?

作者: zoder | 来源:发表于2017-04-01 11:22 被阅读0次

感兴趣的小伙伴可以去测试一下。

答案:a=0

我当时也是有点疑惑的:虽然是先执行计算然后再执行自加操作,但是a还是自加了啊!

代码测试的结果就是a=0

我就在思考a=a++这句代码,是将右边表达式的值赋值给左边的变量。那么a++表达式的值其实是0,

然后赋值给了a,所以a=0。

我这么想好像还解释的通哈。

直到我看到了有大神通过Java字节码来分析其中的原由的时候,我才恍然大悟。

下面给出类似问题的字节码分析过程:

使用 javap -v Test >> test.txt 将Test类的字节码信息输出到text.txt

1、int a=0;a=a++;

生成的字节码是:

0 iconst_0 -----0压入栈顶

1 istore_1 [a] -----栈顶值(0)存入局部变量1(a)

2 iload_1 [a] -----变量1的值压入栈顶(值为0)(a++效果)

3 iinc 1 1 [a] -----变量1自加(a++操作,自加后变量1的值为1)

6 istore_1 [a] -----将栈顶值(0)存入变量1(=操作)

a的值依次变化为:0->1->0

2、int a=0;a=++a;

生成的字节码是:

0 iconst_0 -----0压入栈顶

1 istore_1 [a] -----栈顶值(0)存入局部变量1(a)

2 iinc 1 1 [a] -----变量1自加(++a操作,自加后变量1的值为1)

5 iload_1 [a] -----变量1的值压入栈顶(值为1)(++a效果)

6 istore_1 [a] -----将栈顶值(1)存入变量1(=操作)

a的值依次变化为:0->1->1

3、int a=0;a=(a++)+(++a);

0 iconst_0 -----0压入栈顶

1 istore_1 [a] -----栈顶值(0)存入局部变量1(a)

2 iload_1 [a] -----变量1的值压入栈顶(值为0)(a++效果)

3 iinc 1 1 [a] -----变量1自加(a++操作,自加后变量1的值为1)

6 iinc 1 1 [a] -----变量1自加(++a操作,自加后变量1的值为2)

9 iload_1 [a] -----变量1的值压入栈顶(值为2)(++a效果)

10 iadd -----栈顶两值(0,2)相加(结果为2),并存入栈顶

11 istore_1 [a]-----将栈顶值(2)存入变量1(=操作)

a的值依次变化为:0->1->2->2

相关文章

  • Java:int a=0;a=a++;问:a=?

    感兴趣的小伙伴可以去测试一下。 答案:a=0 我当时也是有点疑惑的:虽然是先执行计算然后再执行自加操作,但是a还是...

  • java自增与自减

    int a = 0; a++; 内部执行 int temp = a; temp = temp + 1; retur...

  • 左值or右值、临时变量是const

    int a=0; ++(a++); 或者++a++; 程序出错;因为a++返回的是一个临时变量,而临时变量都是co...

  • 运算符+包机制+javadoc

    Java语言支持如下运算符: int b = a++; // 执行完这行代码后,先给B赋值,再自增 int c =...

  • #define SQUAKE(a)((a)*(a))

    #define SQUAKE(a)((a)*(a))int a = 5;int b;b = SQUAKE(a++)...

  • 论a++和++a

    a++是这一步完成之后才执行+操作,举个例子 int a=0;b=a++;输出的b的值为任意值(因为没赋初值) +...

  • 运算习题

    题1: int a = 1, b = 3; a = a++ + b % 2; int a = 1, b = 3; ...

  • a=0; a=a++; a=?

    在java和c中实现不同,结果也不一样。 java: tmp=a, a=a+1, a=tmp 结果为0 c: a=...

  • iOS自增自减

    int a = 10; int b = a++; 遵从先赋值,后加一的原则: 即: b = a; a = a ...

  • PHP第三节

    赋值运算 $a++; 先赋值在加加$a=0;$b=$a++;echo $b //显示0 ++$a 先加加载赋值$...

网友评论

      本文标题:Java:int a=0;a=a++;问:a=?

      本文链接:https://www.haomeiwen.com/subject/zmkiottx.html