gpt4 book ai didi

Java String创建和String常量池

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:37 26 4
gpt4 key购买 nike

当使用关键字 new 创建字符串时,它会使用采用字符串文字的构造函数创建一个新的字符串对象。我想知道在调用 String 构造函数之前是否将文字存储在常量池中。

我问的原因是在“OCA Java SE 7 Programmer I Certification Guide”中,Mala Gupta 写道:

public static void main(String[] args)
{
String summer = new String("Summer"); //Line 1: The code creates a new String object with the value "Summer". This object is not placed in the String constant pool.
String summer2 = "Summer" //Line 2: The code creates a new String object with the value "Summer" and places it in the String constant pool.
}

她在第一行说 new 创建的 String 对象没有存储在常量池中。这很好,但不清楚第一行构造函数中的文字“Summer”是否是。

在第二行,她说将“Summer”赋值给summer2 并将其存储在常量池中,这意味着第一行的文字并未放入池中。 p>

我的问题

  1. 第 1 行:在调用 String 构造函数 之前,是否将构造函数中的文字“Summer”放入常量池中?
  2. 第 2 行:“Summer”是否已存在于第 2 行 的池中,还是插入到这一行?
  3. 第 2 行:当她说“Summer”被插入到 第 2 行 的池中时,作者是否错了?

最佳答案

简而言之,不要混淆,

你写了,

   String summer  = new String("Summer");   //Line 1: The code creates a new String object with the value "Summer". This object is not placed in the String constant pool.

这是错误的。特别是注释>This object is not placed in the String constant pool.

字符串文字“Summer”现在在池中。并且对象 summer 在堆中创建。

Does the literal "Summer" in the constructor get placed in the constant pool before the String constructor is called?

是的。它进入池,因为它是一个字符串文字。

Does "Summer" already exist in the pool at line 2 or is it inserted at this line?

没有。因为你没有被拘留,所以有两个文字。 (阅读更多关于 String interning 的信息)

Is the author wrong when she says that "Summer" is placed in the pool at line 2?

Other 是正确的。

为了便于内存,我们甚至可以简单地说,"" 之间的所有内容都会进入池,而不管它在何处使用。

关于Java String创建和String常量池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com