【发布时间】:2016-10-08 06:41:22
【问题描述】:
我正在尝试了解字符串池的工作原理以及字符串与另一个字符串相等的规则。
例如这个sn-p:
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 ?
PS:无论如何,我在任何地方都使用 string1.equals(string2)。我只是想更深入地了解底层机制。
【问题讨论】:
-
s3.intern("lol")的结果应该是对与字符串常量相同的实例的引用。
标签: java string heap-memory