java - 字符串池概念简单解释

标签 java string

现在我知道这个问题被问了很多次,也已经回答了很多次,但是对于 Java 新手来说,解释仍然很难理解。 所以我从这些问题中得到的理解如下

String a = "hi";

上述语句首先检查字符串是否存在于字符串池中。如果不是,它会将它添加到池中,并在池中创建它的引用。基本上,对象是在永久代区域中创建的,字符串池用于引用它。

然而,与

String a = new String("hello");

在这种情况下,它创建了两个对象。一个在永久代区,一个在普通堆内存。 a 包含对堆内存对象的引用。

现在我的问题是这个概念是否正确。字符串池是引用还是实际字符串池,我这里理解的永久代区的概念对不对?如有错误请用通俗易懂的语言解释。 请不要重复,因为我已经知道这个问题已经回答了很多次。没有一个是通俗易懂的语言。两个物体实际上是被制造出来的吗?如果是,那么如何,如果不是,那么为什么?这真的很有帮助。

最佳答案

你说的效果基本正确。您制定的问题涉及事情发生的时间。当你写

String a="hi";

或者实际上,您的 Java 文件中的任何地方都有字符串文字 "hi",然后这个字符串文字只分配一次:加载类时,当您的代码开始运行时。然后 a 的初始化只是使用现有的 String 对象。但是当你有一个显式的构造函数调用时,如

String a=new String("hi");

然后创建一个新的字符串。 new 表示一个新的字符串对象。

关于java - 字符串池概念简单解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21376093/

相关文章:

java - 从字符串中获取手机号码和密码

java - JPA 子实体中的父外键为空

python - 提取最后一次出现的大括号之间的文本

java - 如何替换字符串中的括号

javascript - 将存储为 String 的 Array 转换为 Java String 中的 List 对象

java - 如何导出一个表并将数据导入到另一个表中?

java - 更改值 recyclerview.adapter 并将其保存到 mainactivity 中的 textview 中?

java - 带有 https 的 tomcat 在直接 TCP 连接时获得 CLOSE_WAIT

c++ - 是否有更有效或更高效的方法来编写冗长的文本?

c - Win32/C : Convert line endings to DOS/Windows format