首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java赋值运算符执行

Java赋值运算符执行
EN

Stack Overflow用户
提问于 2018-06-21 21:40:42
回答 6查看 4K关注 0票数 76

在Java语言中,我知道赋值的结果是右操作数的值,所以像x == (y = x)这样的语句的计算结果是true

然而,这段代码输出的是false

代码语言:javascript
复制
public static void main(String[]args){
    String x = "hello";
    String y = "goodbye";
    System.out.println(x.equals(x = y));
}

为什么会这样呢?在我的理解中,它首先计算(x = y),这会将y的值赋给x,然后返回y的值。然后计算x.equals(y),它应该是true,因为xy现在应该共享相同的引用,但我得到的是false

这是怎么回事?

EN

回答 6

Stack Overflow用户

发布于 2018-06-21 21:46:50

括号中的x=y表示表达式(x=y)现在为goodbye,而x.equals中的外部x保存值hello

票数 5
EN

Stack Overflow用户

发布于 2018-06-21 21:57:04

Reimus给出了正确的答案,但我想详细说明。

在Java (和大多数语言)中,约定是变量放在左边,赋值放在右边。

让我们来分析一下:

代码语言:javascript
复制
String x = "hello";
//x <- "hello"

String y = "goodbye";
//y <- "goodbye";

为了调试的目的和代码的可读性,一种好的做法是拆分您的行,使它们只做一件事。

代码语言:javascript
复制
System.out.println(x.equals(x = y)); //Compound statement

在这里,在对x的原始引用上调用x.equals(...),或者"hello",它针对第二个引用进行了更新。

我会这样写(这会给出你期望的答案):

代码语言:javascript
复制
x = y;
// x <- y = "goodbye"

boolean xEqualsX = x.equals(x);
// xEqualsX <- true

System.out.println(xEqualsX);
// "true"

现在这似乎是显而易见的,它应该这样做,但也很容易看到每一行中到底发生了什么,这是您应该努力实现的。

票数 4
EN

Stack Overflow用户

发布于 2018-06-23 03:05:10

我认为这个问题在外行术语中是"hello".equals("goodbye")。所以它返回false。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50970043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档