我们知道,String().intern()如果字符串池中尚不存在,则在字符串池中添加字符串值.如果存在,则返回该值/对象的引用.
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
Run Code Online (Sandbox Code Playgroud)
我需要知道,当我打电话给test.intern()这个实习方法会做什么?
在字符串池中添加带有不同引用的"dog"或在字符串池中添加test对象引用(我认为,情况并非如此)?
我试过这个
String test1 = "dog";
test == test1 // returns false
Run Code Online (Sandbox Code Playgroud)
我只是想确保,当我调用test.intern()它时,在String池中创建具有相同值的新对象?现在我有两个值为"dog"的对象.一个直接存在于堆中,另一个存在于String池中?
aio*_*obe 11
当我打电话给
test.intern()这个实习生方法会做什么?
它会将"dog"字符串放入字符串池中(除非它已经存在).但它不一定会放对象是test指在游泳池.这就是你通常这样做的原因
test = test.intern();
Run Code Online (Sandbox Code Playgroud)
请注意,如果您"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
Run Code Online (Sandbox Code Playgroud)