java代码创建或不创建的字符串对象

时间:2016-09-12 17:57:14

标签: java

以下代码:

String对象将在堆区域中创建(不在String池区域内):

String str = new String("very");

现在,如果我修改str以引用“好”,如:

str = "good";    

它会修改在堆中创建的“非常”对象并将其值更改为“good”,还是会在池中创建一个“good”的新对象?

3 个答案:

答案 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"取代。没有创建任何新对象但在同一个内存单元中。