蓦松 -
a+=a++;
分解a=a+a++;
此时a为0,由于a++为先执行运算后自加,所以此时的表达式可以看成是a=0+0,
这时又涉及到运算符优先级问题,=号为最低等级,所以先执行了a++,但是这个a++并不会影响最后的结果了,因为上面的表达式已经出来了,最终a又会被赋值成0+0的结果,所以还是0
阿啵呲嘚 -
a+=a++未定义的。
就是说标准未明确规定它的结果。于是会根据不同编译器各自有不同的结果。
你可以在用c语言在vc或者dev 下编程看看它的结果,没记错的话应该是1.
而Jdk执行过程应该
a++,由于右边的++是先执行运算后自加
所以就执行a+a(结果是0),结果为0,然后执行++(a这个时候是1),最后执行=(把前面a+a执行的结果再次赋给a,那么a就是0),所以最后结果是0。
小菜G的建站之路 -
主要是a+和+a有区别。
在计算时,a+先执行完运算,再把a的值加1
而+a则正好相反,是先把a加1,再执行运算的
题中a初始值为0
a+=a++;这个语句相当于a=a+(a++),小括号中的值为0,所以等式右边的值0+0为0,所以输出为0。
介事_
-
int a=0; 定义变量并赋初值,此时变量值为初值0
a+=a++; 这是一个赋值语句:a=a+a++,等号右边第一个a值为初值0,第二个a也为初值0,此时a 值变为2。但是赋给左边a的值为表达式a+a++的值,因此a=0.
因此输出结果为0
雨落烟波起 -
a+=a++
就相当于a等于a加上a++
对于a++ 由于是后置++ 会先输出原始值 再加一
所以会先输出0
结果就是 a=0+0
苏萦 -
这是一个java中递加很特殊的现象。
a+=a++;貌似等同于a+=0;a+=1;
a+=a++;中,等号左边和右边的运算结果,分别被保存到两个不同的内存领域中,
而你打印之后,只输出了等号左边,也就是在最初定义的int a,所以输出结果是0。
a++的结果,以普通方式从代码中无法访问。
此种现象只能用这个理由来解释
一个接近的例子,如下,
z=y++*10的结果等同于z=y*10;y=y+1
CFKaze -
从算法看上去,a+=a++这一步对a的值没有影响,a还是等于初值0.
a就只是在开始给他赋值了,后来的运算没有给到赋值的命令
所以a还是原来的a,还是值为0
北境漫步 -
a=a+(a++);
这时a=0,a++也等于0,所以a=0;
如果是a+=++a,那么a=a+(++a);,a=0,++a=1,结果为1;
西柚不是西游 -
真搞不懂为啥要搞这个,估计没那个傻X写这种代码玩自己和别人吧,要是给我遇上了我就猛抽,哈哈,不过以前上学的时候老是被老师玩,不敢抽。。。
Chen -
a+=a++;
a = a + a++
由于a++是后++ 所以a++这个表达式的值为0,此时a的值为1,因为a=a+1,
然后a=a+a++ 就是 把1+0的值赋a
结果应该是1!不知道怎么的
冷风醉酒 -
a+=a++;
分解开来就是a = a + a++
由于a++是后++ 所以a的值并没有改变所以是a = 0 + 0 = 0
为什么LZ都把结果写出来了还有那么多的人说最后结果是1呢?
康康map -
a = 0;
a = a + a++
→ a = 0 + 0
结果当然是0
而如果
int a = 0;
a+=++a;
的话,
a = 0;
a = a + (++a)
→ a = 0 + 1
System.out.println(a);
这样输出结果就是1了
苏州马小云 -
a++ 是代码执行后才变成1 所以可以理解成
a+=0
这样当然还是0
如果是a+=++a 这样的效果完全不一样,实质是:
a+=1
结果是1
敬岭 -
你已经定义了 变量A,而且你设置A的初始值是0.
先根据优先级,a++的结果是0,然后a+的结果还是a,所以最后这个结果是0.不知道你懂没有。
CatMTan -
把分给我吧
