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