【问题标题】:java println("a==b"+"is"+a==b) prints false instead of "a==b is true" [duplicate]java println("a==b"+"is"+a==b) 打印 false 而不是 "a==b is true" [重复]
【发布时间】:2011-02-05 09:52:05
【问题描述】:

可能的重复:
Getting strange output when printing result of a string comparison

大家好,

System.out.println() 以不同的方式处理字符串。 谁能解释一下原因

见下面代码sn-p

String a ="hello"
String b ="hello"

System.out.println("a==b"+"is"+a==b)

我希望这会打印 'a==b is true',但它只会打印 false,我不知道为什么。

【问题讨论】:

  • 事实上,大多数现代 java 编译器池字符串文字,所以它实际上可能打印 a==b is true,虽然这纯粹是运气,正如大家提到的,.equals() 是你应该比较的方式
  • @davin: 不,他的示例只打印了false,因为a 被连接到"a==b"+"is",并且使用==b 进行比较。
  • @Bart,当我发表评论时,问题看起来不像那样。您的评论和我的评论显然不同步,我将优雅地终止我的线程(编程意义上的“线程”,而不是论坛意义上的),对这个问题没有什么兴趣,我只是指出了一个附带事实,尽管有所有这些编辑,它不再相关。
  • 不是重复的。这是关于运算符优先级,而不是字符串比较。
  • 抱歉,我在意识到这与字符串比较无关,而是a 在与b 进行比较之前进行了连接之前,投票决定关闭。投票决定重新开放。

标签: java string operators equality operator-precedence


【解决方案1】:

因为您没有对布尔表达式进行分组,所以会打印一个 false。

表达式:

"a==b"+"is"+a==b

被评估为

("a==b"+"is"+a) == (b)

当您希望它进行字符串连接时:

"a==b"+"is"+ (a==b)

也就是说,您不应该像其他人指出的那样使用 == 比较字符串。

【讨论】:

  • @mahati,不客气。
【解决方案2】:

问题不在于 System.out.println();这是字符串对象与== 的比较。使用.equals() 方法比较两个字符串对象。请参考以下链接。 String Object comparison

【讨论】:

  • "with System.out.println(); 与字符串对象比较 == 使用 .equals()" -- 你能否提供一个支持的链接你声称?如果是这样,我会删除我的 -1,但我很确定它不正确。
  • 如果我们使用 == 会比较字符串对象的引用!!!我没有提到 == 比较有问题,我提到使用 == 会导致问题。如果我们使用 == 进行字符串比较,我们可能无法得到实际结果。
【解决方案3】:

这可能是因为它将 a 和 b 视为不同的对象。当我们像这样创建字符串时,它指的是不同的字符串池。

【讨论】:

  • 只有一个字符串池(无论如何这不是这个问题的错误。)
猜你喜欢
  • 2014-03-29
  • 2011-10-20
  • 2021-10-06
  • 2019-10-27
  • 2016-02-23
  • 2011-08-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多