黑马程序员技术交流社区

标题: ++ 用法问题 有码 [打印本页]

作者: 灬王一鹏    时间: 2015-9-6 22:43
标题: ++ 用法问题 有码
  1. int a = 10;
  2. int b = ++a;
  3. a = a++;
  4. System.out.println(a);
复制代码

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

作者: 生存追求    时间: 2015-9-6 23:18
本帖最后由 生存追求 于 2015-9-6 23:22 编辑

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

所以这是编译器的问题。

作者: 灬王一鹏    时间: 2015-9-7 00:08
刘登飞 发表于 2015-9-6 23:36
第一步:a++是一个表达式,因为++符号在后面所以先使用a,a++表达式的值是10
第二步:进行++运算,相当于a = a+1 ...

谢谢么么哒
作者: 残影    时间: 2015-9-7 00:08
残影 发表于 2015-9-7 00:01
因为java编译器中 ++算术运算符的优先级高于=赋值运算符,,这是运算符优先级的问题。
a = a++; // ++在左 ...

手误 。a++,++在右边。哈哈,简单记,就是一个优先级的问题,编译器编辑语言不同而异。
作者: 灬王一鹏    时间: 2015-9-7 00:11
残影 发表于 2015-9-7 00:08
手误 。a++,++在右边。哈哈,简单记,就是一个优先级的问题,编译器编辑语言不同而异。 ...

恩  理解了 谢谢 了兄弟




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2