请解释以下两种陈述之间的简要和详细区别:
String a= "somevalue";
String b = new String("somevalue");
我知道第二条语句b
在堆中创建并为字符串对象提供内存。但是为什么对象a
没有获得内存并且仍然允许对字符串方法进行操作。
请解释以下两种陈述之间的简要和详细区别:
String a= "somevalue";
String b = new String("somevalue");
我知道第二条语句b
在堆中创建并为字符串对象提供内存。但是为什么对象a
没有获得内存并且仍然允许对字符串方法进行操作。
a
并且b
是对对象的引用,而不是对对象的引用。
当你这样做a = b;
时,它不会复制对象,它会复制对对象的引用。
Stringchar[]
内部有一个对象,它是另一个对象。
a
获取对现有对象的引用,因此它可能不需要任何额外的内存。
b
获取对新创建对象的引用,因此需要更多内存。
它仍然允许对字符串方法进行操作。
这与对象的创建方式无关。
第一个影响字面字符串对象“somvalue”到变量a
。此文字字符串对象与所有文字字符串一样缓存在池中。
第二个创建空字符串的新实例。由于 String 实例是不可变的,因此它等价于String b = "";
,除了它徒劳地实例化一个新对象。