14
为什么x ==(x = y)与(x = y)== x不同?
考虑以下示例: 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)比较并返回true。 这个问题与Java表达式中子表达式的求值顺序不同,因为x这里绝对不是“子表达式”。需要加载它以进行比较,而不是对其进行“评估”。这个问题是特定于Java的x == (x = y),与通常为棘手的面试问题设计的牵强的不切实际的构造不同,该表达式来自一个真实的项目。它原本应该是“一键替换”成语的单行替换 …