本帖最后由 残影 于 2015-9-7 00:10 编辑
int a = 10;
int b = ++a;
a = a++;
System.out.println(a);//输出11,why?
还是一个很好的问题呢。回答了几个帖子,由于找不到自己回复的帖子,所以自问自答发一个。以后也方便自己看。算是笔记咯。
因为java编译器中 ++算术运算符的优先级高于=赋值运算符,,这是运算符优先级的问题。
a = a++; // ++在右边,本来是先赋值给a然后自加的,但是由于++高于=,所以先把(a++)这个值 11,java会先开辟一个临时空间存储11,然后a自加1得到12,所以都执行完了之后,开始赋值。就把临时空间存储的数值11,给赋值给了a,所以a的12被覆盖了,所以a就是11了。
所以这是编译器的问题。 |
|