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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 灬王一鹏 中级黑马   /  2015-9-6 22:43  /  908 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. int a = 10;
  2. int b = ++a;
  3. a = a++;
  4. System.out.println(a);
复制代码

为什么会是11?而不是12呢?

8 个回复

倒序浏览
本帖最后由 生存追求 于 2015-9-6 23:22 编辑

a=a++是,a(=前)是先赋值的为11,System.out.println(a),打印的a是等于号前的
回复 使用道具 举报
            int a = 10;             int b = ++a;             b= a++;             System.out.println(a);             System.out.println(b); 你可以用这个程序验证一下,b=12
回复 使用道具 举报
第一步:a++是一个表达式,因为++符号在后面所以先使用a,a++表达式的值是10
第二步:进行++运算,相当于a = a+1,这样a变成11
第三步:进行赋值运算,将第一步整个表达式的值(10),再赋值给a
回复 使用道具 举报
小木全 来自手机 中级黑马 2015-9-6 23:38:33
报纸
看来都是一个班的
回复 使用道具 举报
因为java编译器中 ++算术运算符的优先级高于=赋值运算符,,这是运算符优先级的问题。
a = a++; // ++在左边,本来是先赋值给a然后自加的,但是由于++高于=,所以先把(a++)这个值 11,java会先开辟一个临时空间存储11,然后a自加1得到12,所以都执行完了之后,开始赋值。就把临时空间存储的数值11,给赋值给了a,所以a的12被覆盖了,所以a就是11了。

所以这是编译器的问题。
回复 使用道具 举报
刘登飞 发表于 2015-9-6 23:36
第一步:a++是一个表达式,因为++符号在后面所以先使用a,a++表达式的值是10
第二步:进行++运算,相当于a = a+1 ...

谢谢么么哒
回复 使用道具 举报
残影 发表于 2015-9-7 00:01
因为java编译器中 ++算术运算符的优先级高于=赋值运算符,,这是运算符优先级的问题。
a = a++; // ++在左 ...

手误 。a++,++在右边。哈哈,简单记,就是一个优先级的问题,编译器编辑语言不同而异。
回复 使用道具 举报
残影 发表于 2015-9-7 00:08
手误 。a++,++在右边。哈哈,简单记,就是一个优先级的问题,编译器编辑语言不同而异。 ...

恩  理解了 谢谢 了兄弟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马