【问题标题】:What will be output and explanation? [duplicate]输出和解释是什么? [复制]
【发布时间】:2019-06-13 13:53:54
【问题描述】:

下面的代码返回布尔假值。对此有何解释?

String str = "Bee";
String str2 = "Bee";
System.out.println("==" + str == str2); 

实际结果:假

【问题讨论】:

标签: java


【解决方案1】:

使用equals比较字符串,这种情况会返回true

== 运算符比较字符串与Object 完全相同。

可能理论上发生在内部化字符串的情况下,但你不能依赖这个。对于您的情况,比较 String 值,请使用 str.equals(str2)

【讨论】:

  • 虽然一般来说,你是对的,但这本身不是问题。
【解决方案2】:

strstr2 都分配了相同的 String 实例,因为 String 文字自动存储在 String 池中。因此str == str2true

但是,您正在打印表达式 "==" + str == str2。该表达式是从左到右计算的,所以首先计算"==" + str,结果是String“==Bee”。然后将== 运算符应用于“==Bee”和“Bee”,返回false

如果将语句更改为:

System.out.println("==" + (str == str2)); 

您将获得true,因为现在比较将在String 连接之前进行。

【讨论】:

  • 在这种特殊情况下是的。但是使用 == 比较字符串是不好的做法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2012-02-28
  • 1970-01-01
  • 2013-08-24
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多