0

可能重复:
Java 中的“text”和 new String(“text”) 有什么区别?

请解释以下两种陈述之间的简要和详细区别:

String a= "somevalue";
String b = new String("somevalue");

我知道第二条语句b在堆中创建并为字符串对象提供内存。但是为什么对象a没有获得内存并且仍然允许对字符串方法进行操作。

4

2 回答 2

3

a并且b是对对象的引用,而不是对对象的引用。

当你这样做a = b;时,它不会复制对象,它会复制对对象的引用。

Stringchar[]内部有一个对象,它是另一个对象。

a获取对现有对象的引用,因此它可能不需要任何额外的内存。

b获取对新创建对象的引用,因此需要更多内存。

它仍然允许对字符串方法进行操作。

这与对象的创建方式无关。

于 2012-09-06T09:42:20.807 回答
3

第一个影响字面字符串对象“somvalue”到变量a。此文字字符串对象与所有文字字符串一样缓存在池中。

第二个创建空字符串的新实例。由于 String 实例是不可变的,因此它等价于String b = "";,除了它徒劳地实例化一个新对象。

于 2012-09-06T09:42:43.750 回答