我正在尝试理解字符串池是如何工作的,以及一个字符串与另一个字符串相等的规则。
例如,这段代码:
public static void main(String[] hi){
String s1 = "lol";
String s2 = "lol";
String s3 = new String("lol");
System.out.println( s1 == s2 );// true
System.out.println( s2 == s3); // false
s3.intern(); //line 1
System.out.println( s1 == s3); // false
testString(s1);
}
private static void testString(String s1){
String s4 = "lol";
System.out.println( s1 == s4); // true
}
在//line 1:将字符串添加到字符串池中。由于它与s1不相等,我假设字符串池中有一个重复项。正确吗?
何时会在池中出现重复项?换句话说,即使两个字符串具有相同的字符序列,
someString == someString
什么情况下会返回false?
注:我无论何时都使用string1.equals(string2)。我只是想更深入地了解基础机制。
s3.intern("lol")
的结果应该是一个指向与字符串常量相同实例的引用。 - Hank D