gpt4 book ai didi

java - 为什么 x == (x = y) 与 (x = y) == x 不一样?

转载 作者:IT老高 更新时间:2023-10-28 12:16:51 24 4
gpt4 key购买 nike

考虑以下示例:

class Quirky {
public static void main(String[] args) {
int x = 1;
int y = 3;

System.out.println(x == (x = y)); // false
x = 1; // reset
System.out.println((x = y) == x); // true
}
}

我不确定 Java 语言规范中是否有一项规定加载变量的先前值以与右侧 (x = y) 进行比较,按顺序用括号表示,应先计算。

为什么第一个表达式的结果为 false,而第二个表达式的结果为 true?我本来希望首先评估 (x = y),然后将 x 与自身 (3) 进行比较并返回


这个问题不同于 order of evaluation of subexpressions in a Java expression因为 x 绝对不是这里的“子表达式”。它需要加载进行比较,而不是“评估”。这个问题是特定于 Java 的,表达式 x == (x = y) 不同于通常为棘手的面试问题而设计的牵强附会的不切实际的结构,它来自一个真实的项目。它应该是比较和替换习语的单行替换

int oldX = x;
x = y;
return oldX == y;

它比 x86 CMPXCHG 指令更简单,应该在 Java 中使用更短的表达式。

最佳答案

== 是二进制 equality operator .

The left-hand operand of a binary operator appears to be fully evaluated before any part of the right-hand operand is evaluated.

Java 11 Specification > Evaluation Order > Evaluate Left-Hand Operand First

关于java - 为什么 x == (x = y) 与 (x = y) == x 不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53749841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com