本帖最后由 halohoop 于 2015-7-28 16:06 编辑
首先是论坛里有这道题目,问为何a打印出来不是11:
- class Test
- {
- public static void main(String[] arges)
- {
- int a = 10;
- a=a++
- System.out.println(a);//问题:为何不是11
- }
- }
复制代码 ——————————————————————————————
以下指示个人理解的方式,并不是正确答案:
貌似大家都没有说到点子上,其实分解一下就可以理解了:
a=a++;
我们说这句先执行的是赋值动作也就是 :
a=a;
而我们知道使用赋值符号“=”连接的变量和表达式,最终可以被打印出来的,
也就是说可以这样
System.out.println(变量1=表达式2);
而且打印的结果是变量1的值。
那么“a=a”执行完,就相当于剩下“10++”,当然语法上这是不支持的,
然而10加1之后,有没有一个变量去接收它,int b = 10 + 1;
——————————————————————————
正解请参照↓↓↓↓:
————————————————————————————
a++可以分解成a=10,a=a+1,这两句语句,在java的底层运行机制中,是从右到左执行的,所以先执行了a=a+1,又执行了a=10,等于说是把10加上一后,又直接把a赋值为10,这才是a++这个语句的执行结果,所以最后输出的是10,11在底层机制里直接被忽略了。 这是老师上课时给的标准答案,关于底层的东西那是搞架构的大神研究的,我们这个水平还远远没有入流呀
感谢“syzc321”
————————————————————————————
|