2014-05-16 140 views
-2

的引用i使用赋值运算符爪哇字符串池改变对象

字符串nameVar =“亨利”创建一个字符串对象;
(使在字符串池中的对象/亨利的值常量池)

然后我再次分配新值,以可变nameVar

nameVar =“Ann”;
(这使得与价值“安安”和新的参考地址字符串/常量池中的对象存储在变量)

我的问题..
1.Problem是第二次分配对象变量确实以前后对象被丢弃还是存储在池中?

2.如果它存储在池中。我创建了另一个新的变量,并使用赋值操作符创建一个值为“Henry”的字符串对象,它是否指向存储在池中的相同对象?

String newNameVar =“Henry”;

3.i使用具有值“Britney”的new运算符创建一个String对象,然后使用具有相同值“Britney”的新运算符创建另一个字符串变量(Object)。第二个变量是指前一个对象还是只创建一个新对象并引用它?

String oldVar = new String(“Britney”);
String newVar = new String(“Britney”);

欢呼声。

+0

你可以通过google/SO上的小搜索找到答案 –

回答

0

每次你写一个带“...”的字符串时,如果在字符串池中存在相同的字符串或者在字符串池中创建了新字符,它将被重用。

new关键字总是在堆上创建新对象。

在Kathy Sierra的书Sun Sertified Java Developer 6中有很好的解释。

0

Java在池和头中维护字符串对象。每当你使用引用“someString”来使用assigment时,java首先检查池中是否存在这个字符串,如果是的话,它会引用另一个明智的字符串来在内存中创建新的字符串对象。

如果使用new运算符new new(“abc”),它会在堆中创建对象。不管头部是否有客观存在。

直到和除非,你有一些明确的要求,更喜欢使用“一些”而不是新的关键字。它会帮助你进行内存管理。