使`str1 == str2`成为逻辑错误的特殊情况是什么?

时间:2016-10-26 09:45:25

标签: java

我知道java在String Literals中存储Common Pool,两个具有相同文本的字符串文字将引用公共池中的相同位置。采取以下代码:

String str1 = "Amir";
String str2 = "Amir";

现在,str1str2都指向公共池中的相同位置。所以我们都知道我们必须使用equals()来正确地比较这两个字符串,显然str1.equals(str2)将是true

现在从我读到的here它说str1 == str2将是真的,因为字符串都具有相同的地址(听起来很合乎逻辑)但它也说明这是一个逻辑错误

我的问题是,如果我使用str1 == str2,可能会对我的代码造成麻烦和不一致的特殊情况是什么?

1 个答案:

答案 0 :(得分:1)

不是特殊案例,常见案例:

String base = "Amir123";
String str1 = base.substring(0, 4);
String str2 = "Amir";
System.out.println(str1.equals(str2)); // true
System.out.println(str1 == str2);      // false

Live Copy

String str1 = "Amir";
String am = "Am";
String ir = "ir";
String str2 = am + ir;
System.out.println(str1.equals(str2)); // true
System.out.println(str1 == str2);      // false

Live Copy (谢谢JLRishe

基本上,只是任何时间在运行时创建字符串而不是在编译时完全形成,默认情况下它将是一个新的String对象,所以不是==另一个等效的String对象。