字符串池可以包含两个具有相同值的字符串吗?

Yog*_*gam 1 java string

字符串池可以包含两个具有相同值的字符串吗?

String str = "abc";
String str1 = new String("abc");

   Will the second statement with `new()` operator creates two objects of `string` "abc", one on `heap` and another on `string` pool? 

   Now if i call intern() on str1 ie str1.intern(); as a third statement, will str1 refer to the "abc" from String pool? 

  If yes then what will happen to the object that was created on heap earlier by the new(). Will that object be eligible for garbage collection.?
  If no then what will be the result of str1.intern();?
Run Code Online (Sandbox Code Playgroud)

And*_*ler 6

没有第一个也将创建一个对象,第二个将只创建一个字符串对象.区别在于第一个将在String池中创建,第二个将仅在堆中创建.如果你打电话给str1.intern(); 然后它将被添加到String池中.

String str1 = "abc";
String str2 = new String("abc");
Stirng str3 = "abc"
Run Code Online (Sandbox Code Playgroud)

这里将创建两个对象.第一行将创建一个具有引用str1的强对象,第三行将指向在第一行中使用引用str3创建的同一对象,但在第二行中将创建一个新对象,因为我们在new此处使用关键字.希望它会对你有所帮助.

还要检查这个答案.那里有很好的解释.

  • 如果您在任何情况下都将使用new,则即使字符串池中存在另一个具有相同值的字符串,也会创建新对象.要编辑一点答案. (4认同)
  • @JunedAhsan无论你做什么,只会有两个对象.我编辑了一点我的答案.Plz再次阅读. (2认同)