加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – String.intern()如何工作以及它如何影响String池?

发布时间:2020-12-14 05:49:06 所属栏目:Java 来源:网络整理
导读:我们知道,String().intern()方法在字符串池中添加String值(如果它尚不存在).如果存在,则返回该值/对象的引用. String str = "Cat"; // creates new object in string pool with same character sequence. String st1 = "Cat"; // has same reference of obje
我们知道,String().intern()方法在字符串池中添加String值(如果它尚不存在).如果存在,则返回该值/对象的引用.
String str = "Cat"; // creates new object in string pool  with same character sequence.  
String st1 = "Cat"; // has same reference of object in pool,just created in case of 'str'

 str == str1 //that's returns true

String test = new String("dog");
test.intern();// what this line of code do behind the scene

我需要知道,当我调用test.intern()这个实习方法会做什么?

在字符串池中添加带有不同引用的“dog”或在字符串池中添加测试对象引用(我认为,情况并非如此)?

我试过这个

String test1 = "dog";

test == test1 // returns false

我只是想确保,当我调用test.intern()时,它会在String池中创建具有相同值的新对象?现在我有两个值为“dog”的对象.一个直接存在于堆中,另一个存在于String池中?

解决方法

when i call test.intern() what this intern method will do?

它会将“dog”字符串放在字符串池中(除非它已经存在).但它不一定会将测试所指的对象放在池中.这就是你通常这样做的原因

test = test.intern();

请注意,如果您的代码中有“dog”字面值,那么字符串池中已经存在“dog”,因此test.intern()将返回该对象.

也许你的实验让你困惑,实际上你想到的是以下实验:

String s1 = "dog";             // "dog" object from string pool
String s2 = new String("dog"); // new "dog" object on heap

System.out.println(s1 == s2);  // false

s2 = s2.intern();              // intern() returns the object from string pool

System.out.println(s1 == s2);  // true

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读