可能重复:
What is the difference between “text” and new String(“text”) in Java?
请解释以下两个陈述之间的简要和详细差异:
String a= "somevalue";
String b = new String("somevalue");
我知道第二个语句为堆中的String Object b
创建并提供内存。但是为什么对象a
没有获得内存,它仍然允许对字符串方法进行操作。
答案 0 :(得分:3)
a
和b
是对象的引用,而不是对象。
执行a = b;
时,它不会复制对象,而是复制对象的引用。
一个字符串里面有一个char[]
,它是另一个对象。
a
获取对现有对象的引用,因此可能不需要任何额外的内存。
b
获取对新创建的对象的引用,因此需要更多内存。
仍允许对字符串方法进行操作。
这与对象的创建方式无关。
答案 1 :(得分:3)
第一个影响文字String对象“somvalue”到变量a
。此文字String对象缓存在池中,与所有文字字符串一样。
第二个创建一个空String的新实例。由于String实例是不可变的,因此它等同于String b = "";
,除非它实例化一个新对象。