在jdk1.7与jdk1.6中String类intern()的学习与理解
在jdk1.6与jdk1.7中,String类中的intern()方法实现的原理是有一些差异的。
1、在jdk1.6中,intern()方法是先查找字符串常量池是否含有当前字符串,如果没有,那么就在字符串常量池中创建 该字符串,并且返回该字符串在字符串常量池中的引用
2、在jdk1.7中,intern()方法也是先查找字符串常量池中是否含有当前字符串,如果没有,那么就在堆中创建改字符串,并且返回该字符串在堆中的引用
这一改动会影响到相关比较的结果,一下是代码的实例
String s = new String("ja")+ new String("va");
System.out.println(s.intern() == s);
在jdk1.6版本中,该结果为false,因为s在堆中,s.intern()在字符串常量池中
在jdk1.7版本中,该结果为true,因为s和s.intern()都在堆中,并且都指向同一个字符串。