正在学习Java,对赋值操作的返回值的属性有疑问。我知道 Java 在
x = y
中赋值后返回变量的值,但是这个赋值是什么时候发生的:在涉及赋值的整个表达式之前还是之后?它是在 Java 中定义的,无论是在表达式a == (a = b)
中,变量的值在before 比较导致true
之前被修改,或者如果,表达式给出一个等于a == b
的值,而是赋值 a
和 b
之后?
我知道
a == (a++)
是 true
而 a = (++a)
导致 false
- 这里它确实稍后执行一元增量,即使存在括号。
int a = 2;
System.out.println(a == (a = 2*a+1));
System.out.println(a);
这确实产生了
false
5
作为输出,类似于一元增量的行为。对于我的编译器来说只是这样,还是这种行为实际上是用
=
操作定义的?
这是由JLS 15.7.1指定的。
二元运算符的左手操作数似乎在右手操作数的任何部分被求值之前被完全求值。
==
是一个二元运算符,因此 a
总是在 任何部分 a = 2 * a + 1
被评估之前被完全评估。