我知道java在String Literals
中存储Common Pool
,两个具有相同文本的字符串文字将引用公共池中的相同位置。采取以下代码:
String str1 = "Amir";
String str2 = "Amir";
现在,str1
和str2
都指向公共池中的相同位置。所以我们都知道我们必须使用equals()来正确地比较这两个字符串,显然str1.equals(str2)
将是true
。
现在从我读到的here它说str1 == str2
将是真的,因为字符串都具有相同的地址(听起来很合乎逻辑)但它也说明这是一个逻辑错误
我的问题是,如果我使用str1 == str2
,可能会对我的代码造成麻烦和不一致的特殊情况是什么?
答案 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
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
基本上,只是任何时间在运行时创建字符串而不是在编译时完全形成,默认情况下它将是一个新的String
对象,所以不是==
另一个等效的String
对象。