提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
看的jvm虚拟机第三版,学到的小东西
一、String::intern是什么?
Sting字符串调用intern方法,如果字符串常量池中包含该字符串,就返回字符串常量池中的对象引用,否则,在字符串常量池中也创建一个该字符串的引用,然后,返回堆中字符串常量池中的引用。
二、使用步骤
1.测试代码
代码如下(示例):
String ss="abc";
String ss2=new StringBuilder("ab").append("c").toString();
System.out.println(ss2.intern() == ss2);
String ss1=new StringBuilder("de").append("f").toString();
System.out.println(ss1.intern() == ss1);
结果(示例):
false
true
第一行,在字符串常量池中创建了“abc“字符串,并在堆中创建了ss对象,内容为‘abc’
第二行,在堆中创建了ss2对象,内容为’abc’
第三行,ss2.intern(),因为字符串常量池中存在‘abc’,所以返回字符串常量池的引用,ss2是堆中的对象,是返回堆中的引用,
所以输出为false
第五行,在堆中创建了ss1对象
第六行,ss1.intern(),在字符串常量池中创建了‘def’字符串,并返回堆中对象引用,ss1本身就是堆中的对象
所以输出为true
记得
一定要用 == 做测试,不能用equals方法测试,
因为==比对的是两个对象的地址,而equals比较的是两个对象的值
用equals比较的话,都会是true