【你可能不知道的java小知识】--String.intern()

String.intern()是String类一个常用的本地方法,它的作用是把一个字符串放入常量池并返回对常量池中这个字符串的引用。要注意的是在JDK1.7之后,对这个方法做了一些修改,如果这个字符串在常量池中还不存在,那么返回的是在堆上的引用,并没有把这个字符串复制到常量池,在JDK1.7之前,这种情况下就会有1个复制的操作,把字符串复制到常量池后返回常量池中的引用。

代码示例:
String s1 = new StringBuilder().append("ab").append("cd").toString();
System.out.println(s1.intern() == s1);
String s2 = new StringBuilder().append("ja").append("va").toString();
System.out.println(s2.intern() == s2);
JDK1.7执行结果:

true
false

结果说明:

在执行s1.intern()的时候,"abcd"这个字符串在常量池中不存在,所以返回的是本身的引用,s1.intern() == s1结果是true;
在执行s2.intern()的时候,"java"这个字符串在常量池中已经存在,所以返回的是在常量池中的引用,和s2自然就不是同一个对象了。

【你可能不知道的java小知识】--String.intern()_第1张图片
intern()内存模型示意图

你可能感兴趣的:(【你可能不知道的java小知识】--String.intern())