【发布时间】:2019-06-13 13:53:54
【问题描述】:
下面的代码返回布尔假值。对此有何解释?
String str = "Bee";
String str2 = "Bee";
System.out.println("==" + str == str2);
实际结果:假
【问题讨论】:
-
是的,这很奇怪。我也不明白为什么“==Bee”和“Bee”不是同一个字符串。
标签: java
下面的代码返回布尔假值。对此有何解释?
String str = "Bee";
String str2 = "Bee";
System.out.println("==" + str == str2);
实际结果:假
【问题讨论】:
标签: java
使用equals比较字符串,这种情况会返回true。
== 运算符比较字符串与Object 完全相同。
这可能理论上发生在内部化字符串的情况下,但你不能依赖这个。对于您的情况,比较 String 值,请使用 str.equals(str2)。
【讨论】:
str 和 str2 都分配了相同的 String 实例,因为 String 文字自动存储在 String 池中。因此str == str2 是true。
但是,您正在打印表达式 "==" + str == str2。该表达式是从左到右计算的,所以首先计算"==" + str,结果是String“==Bee”。然后将== 运算符应用于“==Bee”和“Bee”,返回false。
如果将语句更改为:
System.out.println("==" + (str == str2));
您将获得true,因为现在比较将在String 连接之前进行。
【讨论】: