String p1 = "example";
String p2 = "example";
String p3 = "example".intern();
String p4 = p2.intern();
String p5 = new String(p3);
String p6 = new String("example");
String p7 = p6.intern();
if (p1 == p2)
System.out.println("p1 and p2 are the same");
if (p1 == p3)
System.out.println("p1 and p3 are the same");
if (p1 == p4)
System.out.println("p1 and p4 are the same");
if (p1 == p5)
System.out.println("p1 and p5 are the same");
if (p1 == p6)
System.out.println("p1 and p6 are the same");
if (p1 == p6.intern())
System.out.println("p1 and p6 are the same when intern is used");
if (p1 == p7)
System.out.println("p1 and p7 are the same");
当独立创建两个字符串时,intern()
允许您比较它们,如果之前不存在引用,它还可以帮助您在字符串池中创建引用。
当你使用时String s = new String(hi)
,java会创建一个新的字符串实例,但是当你使用时String s = "hi"
,java会检查代码中是否存在单词“hi”的实例,如果存在,它只返回引用。
由于比较字符串是基于引用的,因此intern()
有助于您创建引用并允许您比较字符串的内容。
当您intern()
在代码中使用时,它会清除引用同一对象的字符串所使用的空间,并仅返回内存中已存在的同一对象的引用。
但是在使用 p5 的情况下:
String p5 = new String(p3);
仅复制 p3 的内容并新创建 p5。所以它没有被实习。
所以输出将是:
p1 and p2 are the same
p1 and p3 are the same
p1 and p4 are the same
p1 and p6 are the same when intern is used
p1 and p7 are the same