A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 残影 高级黑马   /  2015-9-7 00:04  /  551 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 残影 于 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了。

所以这是编译器的问题。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马