Java String Pool更改对象的引用

时间:2014-05-16 18:08:00

标签: java string object pool

我使用赋值运算符

创建一个字符串对象
  

String nameVar =“Henry”;   
  (这使得String池/常量池中的对象的值为Henry)

然后我再次为变量 nameVar 指定一个新值。

  

nameVar =“Ann”;
  (这使得String / Constant池中的对象具有值“Ann”并且新的引用地址存储在变量中)

我的问题..
1.问题是在将第二个对象分配给变量后,先前的对象被丢弃还是存储在池中?

2.如果它存储在池中。我创建另一个新变量并使用赋值运算符创建一个值为“Henry”的字符串对象它是否引用存储在池中的同一对象?;

  

String newNameVar =“Henry”;

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

  

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

欢呼声。

2 个答案:

答案 0 :(得分:0)

每次用" ..."写一个字符串如果字符串池中存在相同的字符串,或者在字符串池中创建new,则重用它。

new关键字始终在堆上创建新对象。

Kathy Sierra在书中Sun Sertified Java Developer 6很好地解释了这一点。

答案 1 :(得分:0)

Java在pool和head中维护字符串对象。每当你使用quote" someString"来使用assigment时,java首先检查池中是否存在此字符串, 如果是的话,它指的是在内存中创建新的字符串对象。

如果是新的运算符,新的String(" abc"),它会在堆中创建对象。无论头部是否具有反对意义。

除非您有一些明确的要求,否则更愿意使用"某些"而不是新的关键字。它将帮助您进行内存管理。