我的问题是,当我们将 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/