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)
Java中HashMap底层实现原理(JDK1.8)源码分析
Java中HashMap底层实现原理(JDK1.8)源码分析