jdk1.6与jdk1.8中String的intern()方法区别

Posted pastjx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk1.6与jdk1.8中String的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()方法区别的主要内容,如果未能解决你的问题,请参考以下文章

多jdk环境变量配置问题(jdk1.6,jdk1.7,jdk1.8)

String中intern方法的作用

Java中HashMap底层实现原理(JDK1.8)源码分析

Java中HashMap底层实现原理(JDK1.8)源码分析

Java中HashMap底层实现原理(JDK1.8)源码分析

内存模型