Trong Java, tôi hiểu rằng phép gán đánh giá giá trị của toán hạng bên phải, vì vậy các câu lệnh như x == (y = x)
eval to true
.
Mã này, tuy nhiên, đầu ra false
.
public static void main(String[]args){
String x = "hello";
String y = "goodbye";
System.out.println(x.equals(x = y));
}
Tại sao thế này? Theo hiểu biết của tôi, đầu tiên nó đánh giá (x = y)
, chỉ định x
giá trị của y
, và sau đó trả về giá trị của y
. Sau đó x.equals(y)
được đánh giá, nên true
từ đó x
và y
nên chia sẻ các tài liệu tham khảo giống nhau ngay bây giờ, nhưng thay vào đó, tôi nhận được false
.
Chuyện gì đang xảy ra ở đây?
x.equals( y = x )