以下代码:
String对象将在堆区域中创建(不在String池区域内):
String str = new String("very");
现在,如果我修改str以引用“好”,如:
str = "good";
它会修改在堆中创建的“非常”对象并将其值更改为“good”,还是会在池中创建一个“good”的新对象?
答案 0 :(得分:2)
String str = new String("very");
str
是一个参考。意味着它“指向”一个字符串对象。
当你这样做时
str = "good"
你只需要str
指向另一个对象。您不是要尝试更改str
指向的对象的内容。
如果你做了str.Method()
之类的事情,这将尝试对str
指向的对象执行某些操作,但由于字符串是不可变的,您仍然可以获得一个新的字符串对象。
但只需做
str = ...
您在其他地方制作参考点,这对所有参考类型都很常见。
答案 1 :(得分:-1)
它将返回一个字符串对象。 String类是不可变的,因此一旦创建,就无法更改String对象。 String类有许多方法,其中一些将在下面讨论,它们似乎可以修改字符串。由于字符串是不可变的,因此这些方法真正做的是创建并返回包含操作结果的新字符串。 Reference
答案 2 :(得分:-2)
String str=new String("very");
这里str为值为"very"
的字符串对象的引用。
new String("very")
是在java中创建的引用对象。
虽然"非常"价值将被" Good"取代。没有创建任何新对象但在同一个内存单元中。