创建为文字和新运算符的字符串

时间:2015-07-06 13:54:12

标签: string new-operator literals pool

当我使用:

声明一个String时
String a = new String("Hello");

创建了2个对象。 1个对象驻留在堆中,另一个对象驻留在String文字池中。

所以当我这样做时:

String b = "Hello";

是否创建了一个新对象,或者是"Hello"引用的字符串池中的b

2 个答案:

答案 0 :(得分:0)

创建一个新对象。

说明

  • 'go to nect column CounterCol = CounterCol + 1 在堆上创建一个对象。它不存储在String文字池中。更多信息here

  • new String("Hello")首先要从池中重用String String b = "Hello",但没有。因此,它将在池中创建一个新的"Hello" String对象 ,并为其分配引用。

您可以在Java Language Specification 3.10.5中阅读有关字符串文字的更多信息。

测试

我们可以test引用指向不同的对象:

"Hello"

按预期打印String a = new String("Hello"); String b = "Hello"; System.out.println(a == b);

答案 1 :(得分:0)

我在谈论Java语言。我在很多地方都读到了

String a = new String("Hello") 

创建2个对象。一个是在堆中。你能否告诉我其他对象在哪里创建?