【发布时间】:2018-11-30 21:00:27
【问题描述】:
在 Java 中,我知道赋值计算为正确操作数的值,因此像 x == (y = x) 这样的语句计算为 true。
但是,此代码输出 false。
public static void main(String[]args){
String x = "hello";
String y = "goodbye";
System.out.println(x.equals(x = y));
}
这是为什么?在我的理解中,它首先评估(x = y),它为x赋值y,然后返回y的值。然后评估x.equals(y),它应该是true,因为x 和y 现在应该共享相同的引用,但相反,我得到false。
这里发生了什么?
【问题讨论】:
-
我想你想看到
x.equals( y = x )的结果 -
编译器能否内联
x和y? -
您是否假设在评估左侧的
x之前执行右侧的赋值x = y? -
@khelwood 是的,这是我的假设。它不能
-
@nits.kk 我不这么认为。 OP 已经说过他们理解
x == (y = x)的计算结果为真。你建议的行为就会很明显......
标签: java string equals assignment-operator