String.intern()如何工作以及它如何影响String池?
我们知道, 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”或在字符串池中添加test
对象引用(我想,情况并非如此)?
我试过这个
String test1 = "dog"; test == test1 // returns false
我只是想确定,当我调用test.intern()
它会在String池中创建具有相同值的新对象吗? 现在我有两个值为“dog”的对象。 一个直接存在于堆中,另一个存在于String池中?
当我调用
test.intern()
这个实习方法会做什么?
它会将"dog"
字符串放入字符串池中(除非它已经存在)。 但它不一定会将test
所指的对象放在池中。 这就是你通常这样做的原因
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