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

posted @ 2020-12-12 21:43  vaen  阅读(120)  评论(0)    收藏  举报