当前位置: 首页 > 知识库问答 >
问题:

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

宰父正真
2023-03-14

字符串池是否可以包含两个值相同的字符串??

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();?

共有3个答案

李洋
2023-03-14

新建字符串(“abc”)是一个类实例创建表达式,必须创建一个新对象。它是否在内部与文字“abc”共享相同的字符数组取决于字符串实现。两个“abc”引用将使用相同的内部字符串。

吴展
2023-03-14

“abc”对象将在类加载时创建,并放在字符串池中。第二行将使用字符串(String original)构造函数,其中original是指向池中“abc”的指针。这是第二行的字节码:

NEW java/lang/String
DUP
LDC "abc"
INVOKESPECIAL java/lang/String.<init>(Ljava/lang/String;)V
ASTORE 2
郏稳
2023-03-14

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

String str1 = "abc";
String str2 = new String("abc");
Stirng str3 = "abc"

这里将创建两个对象。第一行将使用参考str1创建一个强对象,第三行将指向在第一行中使用参考str3创建的同一个对象,但在第二行中,将创建一个新对象,因为我们在此处使用了新关键字。希望它能帮助你。

同时检查此答案。有很好的解释。

 类似资料:
  • "给定两个字符串s和t,编写一个函数来检查s是否包含t的所有字符(顺序与字符串t相同)。返回true或false。递归不一定。这是我用java写的代码片段。问题是输入: string1="st3h5irteuyarh!"和string2="shrey"它应该返回TRUE,但它返回FALSE。那是为什么?"

  • 本文向大家介绍C ++中的元字符串(检查一个字符串交换后两个字符串是否可以相同),包括了C ++中的元字符串(检查一个字符串交换后两个字符串是否可以相同)的使用技巧和注意事项,需要的朋友参考一下 在本节中,我们将看到如何检查两个字符串是否为元字符串。元字符串是非常相似的那些字符串。如果我们在一个字符串中交换两个元素,那么它将与另一个字符串匹配。假设两个字符串是“ HELLO”和“ OELLH”,则

  • 问题内容: 我在寻找Python中的方法。 我想要做: 问题答案: 你可以使用in运算符:

  • 问题内容: 我目前正在处理给我的一个旧项目,它目前使用Java swing并且具有基本的GUI。它具有一个ColorPane,它可以扩展Jtextpane来更改所选文本的颜色。 它使用这种方法 说那个字符串=“ Hello World!” 你好颜色是绿色世界是黑色。如何根据Jtextpane的颜色来获取Hello。我尝试了笨拙的方式,即在更改颜色时只存储所选单词,但是有一种方法可以一次性获取所有绿