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

Ris*_*hak 6 java string string-pool

我的问题是什么是在字符串池中创建字符串对象以及在声明字符串时在Heap上创建字符串对象的用途是什么String a = new String("abc");

为什么我们在创建字符串时在堆中创建字符串String a = "abc".

The*_*ind 6

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

String a = new String("abc");

"abc" 将被解析为编译时常量,因此将被添加到当前JVM的String常量池中.

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

  • @RishiKeshPathak - 这里没有优势..您正在堆中创建 2 个“abc”,另一个在字符串常量池上..在这种情况下,没有优势..实际上您正在创建额外的对象供 GC 处理。 .如果你做了 `char[] c = {'a','b','c'}; String s = new String(c);` 那么 `abc` 将不会出现在字符串常量池中。所以,你就可以走了。 (3认同)