提问人:Arxel 提问时间:5/12/2023 最后编辑:Arxel 更新时间:5/12/2023 访问量:65
在 Java 中,(a == (a = b)) 会产生未定义的行为吗?
In Java, does (a == (a = b)) produce undefined behaviour?
问:
我正在学习 Java,我对赋值操作的返回值的属性有疑问。我知道 Java 在赋值后返回变量的值,但是此赋值何时发生:在涉及赋值的整个表达式之前还是之后?它是否在 Java 中定义,无论是在表达式中,变量的值在比较之前被修改导致 ,还是表达式给出一个等价的值,而是在之后分配?x = y
a == (a = b)
true
a == b
a
b
我知道这是 while 结果 - 这里它确实稍后执行一元增量,即使存在括号。a == (a++)
true
a = (++a)
false
int a = 2;
System.out.println(a == (a = 2*a+1));
System.out.println(a);
这确实产生了
false
5
作为输出,类似于一元增量的行为。我的编译器就是这样,还是实际上用操作定义了这种行为?=
答:
7赞
Louis Wasserman
5/12/2023
#1
这是由 JLS 15.7.1 指定的。
在计算右操作数的任何部分之前,似乎对二元运算符的左操作数进行了完全评估。
==
是一个二元运算符,因此在计算 的任何部分之前,始终会进行完全计算。a
a = 2 * a + 1
上一个:C 语言中的赋值运算符
评论
a == (a = 2*a+1)
a
a
false
a