为什么我们不应该使用==来比较字符串?

时间:2015-04-28 17:51:15

标签: java string

我们可以使用显式或隐式结构创建字符串。

隐式构造示例:

String str1 = "hello";
String str2 = "hello";
str1==str2 // returns true, both str1 and str2 points to the same String object in string pool

明确的构造示例

String str3 = new String("hello");
String str4 = new String("hello")
str3==str4 // returns false because str3 and str4 points to different String object

由于使用隐式构造是首选(内存保存),为什么我们不应该使用==运算符?据我所知,不使用==运算符的唯一原因是我们可以忘记不使用显式结构并尝试做类似的事情

str1==str3
str3==str4 // and so forth

1 个答案:

答案 0 :(得分:8)

Literal strings, coming from your code, are interned。这就是为什么它们在你的例子中是同一个对象。

但是,程序中并非所有字符串都来自您的代码,有些来自各种输入(例如用户输入或文件),或来自您构建它们的操作,并且这些字符串不会被实现(除非您去问问)。这些字符串通常不是==,即使它们是equal