java--native方法intern()
问题:使用s.intern()时发生了什么
官方描述:
返回字符串对象的规范化表示形式。
或者
返回与该字符串具有相同内容的字符串,但是保证来自唯一字符串池
首先先弄清
s指向的是堆内存还是常量池
比如String s = new String("1");
s指向堆内存,同时在常量池中也放一个“1”
此时使用 s.intern();打印输出结果是“1”,这个"1"的来源是常量池
由此可以理解,intern()方法是拿着s所指向的值,在常量池中查找。
找到:返回常量池中的值,但是s依然指向的堆
没找到:把这个值创建,然后是s指向常量池中的这个值。
到此结束,intern()做的就是这件事情。
抓住s的指向问题(堆还是常量池),就是行了
Strings1=newString("he")+newString("llo");
Strings2=newString("h")+newString("ello");
Strings3=s1.intern();
Strings4=s2.intern();
System.out.println(s1==s3);//true
System.out.println(s1==s4);//true
System.out.println(s2==s4);//false
【勤则百弊皆除】

浙公网安备 33010602011771号