java - 为什么使用 new 运算符创建的字符串会在字符串池中创建字符串文字

标签 java string string-pool

我的问题是,当我们将 String 声明为 String a = new String("abc"); 时,在字符串池和堆上创建字符串对象有什么好处?

当我们将字符串创建为 String a = "abc" 时,为什么不在堆中创建字符串。

最佳答案

java语言就是这么设计的。双引号之间使用的任何内容都是编译时常量并进入字符串池。所以,在你的情况下:

String a = new String("abc");

“abc” 将被解析为编译时常量,因此将被添加到当前 JVM 的字符串常量池中。

接下来,a 的值将在运行时解析,并在运行时添加到堆中。

关于java - 为什么使用 new 运算符创建的字符串会在字符串池中创建字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27055171/

相关文章:

Java char数组到String而不创建新对象

java - 在clojure中制作一个插件系统

java - 围绕 '|' 字符在 java 中拆分字符串

c - 'C' 中变量和指针的字符串连接

c++ - 如何将多个字符串附加到一个以逗号分隔的字符串?

java - 混淆字符串引用比较 == 和 intern

java - 为什么同一个 interned String 文字在此 java 代码片段中具有多个值?

java - 如何将Cucumber测试添加到预先存在的Gradle项目(Java)?

java - 处理异常的方法

java对象层次结构,并将对象传递给函数