2018/05/09 String.intern()

在JAVA7及之后,将String pool移出了永久代中,而将String pool直接放在的堆中


当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。

它遵循以下规则:对于任意两个字符串 st,当且仅当 s.equals(t)true 时,s.intern() == t.intern() 才为 true。 

当常量池中没有该字符串时,JDK7的intern()方法的实现不再是在常量池中创建与此String内容相同的字符串,而改为在常量池中记录Java Heap中首次出现的该字符串的引用,并返回该引用。(即intern的效果是常量池有直接返回常量池中的引用,否则返回的heap中第一次创建时的引用)

猜你喜欢

转载自blog.csdn.net/xlb6179685/article/details/80251640