下面的代码返回布尔值false值。有什么解释吗?
String str = "Bee";
String str2 = "Bee";
System.out.println("==" + str == str2);
实际结果:错误
答案 0 :(得分:0)
str
和str2
都被分配了相同的String
实例,因为String
文字被自动存储在String
池中。因此,str == str2
是true
。
但是,您正在打印表达式"==" + str == str2
。该表达式是从左到右求值的,因此首先求"==" + str
的值,并得到String
“ == Bee”的结果。然后,将==
运算符应用于“ == Bee”和“ Bee”,它们返回false
。
如果将语句更改为:
System.out.println("==" + (str == str2));
您将获得true
,因为现在比较将在串联String
之前进行。
答案 1 :(得分:0)
使用equals
比较字符串,在这种情况下它将返回true
。
==
运算符比较这些字符串与Object
完全相同。
理论上,这种可能发生在字符串内部化的情况下,但是您不能依靠它。对于您的情况,比较String
的值,请使用str.equals(str2)
。