在Java 中
int a=10;
a = a + ++a;
System.out.println(a);
它打印CCD_ 1。我知道它会打印22
我知道,由于"++"具有更高的优先级,因此它将首先进行计算,并将改变a的值,因为它是预增量,因此变量"a"的增量将在那里发生,然后。。。稍后,它应该添加a的最新值
如下所示:
a = a + 11; // (a is 11 after pre - increment)
所以,现在是a = 11 + 11 = 22
,但程序生成o/p = 21
。
意味着它没有选择11
的最新值,并使用10
的旧值
a = 10+ 11 = 21
有人能澄清我的疑虑吗?
如果答案包含任何书籍或java规范的概念/参考,我将不胜感激
来自Java文档:
除赋值运算符外的所有二进制运算符都将求值从左到右;赋值运算符从右到左求值。
i++
-获取然后递增++i
-递增然后得到unary operations (++, !)
具有最高优先级- 表达式是从左到右计算的(感谢user16320675(
int i = 10;
System.out.println(i++); // 10
System.out.println(i); // 11
System.out.println(++i); // 12
System.out.println(i); // 12
在您的示例中:
int a = 10;
a = a + ++a; // -> 10 + (10 + 1), from left to right
System.out.println(a); // 21
由于a=10,a=10+11=21。
为什么?因为a的值是10,因为你还没有增加它,所以它保持在10。
在++a中,现在只有您将其递增,然后变为11。现在,a=10+11是21。