String的intern()理解

分jdk的版本
jdk1.6:有永久代,且在方法区里

String  s1 = new  String("he")+new String ("llo");
String  s2 = s1.intern();
Systerm.out.println(s1==s2);

如上代码分析:
在jdk1.6环境中,现在String字符串常量池中生成【he】【llo】两个对象
再分别在堆空间new出【he】【llo】两个对象,接着在堆中拼接【hello】对象
当调用intern()方法后,会在字符串常量池找,没有的话会复制一份到常量池中,这样一来,上述代码总共创建六个对象

但是在jdk1.6以后就不一样了,因为随着去永久代,把字符串常量池逐渐移到堆区中,这样一来,当调用intern()方法时,要是字符串常量池中没有,堆中有则会引用到常量池中,这么一来,在jdk1.6以后上述代码创建的对象总数为五个

你可能感兴趣的:(javase,java,开发语言)