标签:的区别 没有 创建 col new 拷贝 int intern方法 判断
我们用如下代码来证明两个版本intern方法的区别。
jdk1.6
String ab = new String("a") + new String("b"); //在堆中创建"a","b","ab"; String ab2 = ab.intern();//先判断常量池中是否有"ab",如果有直接返回常量池中的地址,如果没有则拷贝一份ab对象放入常量池。 String ab3 = "ab";//因为常量池中有"ab",此时直接返回常量池中地址。 System.out.println( ab2 == ab3 );//true System.out.println( ab == ab3 );//false 此时ab还是返回堆中的地址
jdk1.8
String ab = new String("a") + new String("b"); //在堆中创建"a","b","ab"; String ab2 = ab.intern();//先判断常量池中是否有"ab",如果有直接返回常量池中的地址,如果没有则将该对象放入常量池中。 String ab3 = "ab";//因为常量池中有"ab",此时直接返回常量池中地址。 System.out.println( ab2 == ab3 );//true System.out.println( ab == ab3 );//true 此时ab已经被放入常量池中,所以地址相同
jdk1.6与jdk1.8中String的intern()方法区别
标签:的区别 没有 创建 col new 拷贝 int intern方法 判断
原文地址:https://www.cnblogs.com/pastjx/p/12321431.html