jdk7 版本
例子一:
String s4 = new String("ja") + new String("va");
s4.intern();String s3 = "java";
System.out.println(s3 == s4);//false
例子二:
String s4 = new String("1ja") + new String("va");
s4.intern();
String s3 = "1java";
System.out.println(s3 == s4);//true
例子三:
String s31 = new String("a") + new String("1");
String s = "a1";
System.out.println(s31 == s31.intern()); ////false
例子四:
String s31 = new String("a") + new String("1");
System.out.println(s31 == s31.intern()); //true
在jdk7 中,intern 方法会判断常量池是否存在,存在则返回一个对常量池的引用,不存在则在常量池中生成一个对堆的引用(这个是与jdk6 不同之处,常量池中不存在的情况促使 例子四 中s31与 s31.intern 相等)
例子一 说明了了 “ java” 在虚拟机加载时已经被放在了常量池
本文通过四个示例详细解析了JDK7中字符串常量池的行为,特别是intern方法的作用及其对常量池的影响。揭示了在不同情况下字符串比较的结果,并探讨了常量池在内存中的工作原理。
798

被折叠的 条评论
为什么被折叠?



