我使用赋值运算符
创建一个字符串对象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”);
欢呼声。
答案 0 :(得分:0)
每次用" ..."写一个字符串如果字符串池中存在相同的字符串,或者在字符串池中创建new,则重用它。
new
关键字始终在堆上创建新对象。
Kathy Sierra在书中Sun Sertified Java Developer 6
很好地解释了这一点。
答案 1 :(得分:0)
Java在pool和head中维护字符串对象。每当你使用quote" someString"来使用assigment时,java首先检查池中是否存在此字符串, 如果是的话,它指的是在内存中创建新的字符串对象。
如果是新的运算符,新的String(" abc"),它会在堆中创建对象。无论头部是否具有反对意义。
除非您有一些明确的要求,否则更愿意使用"某些"而不是新的关键字。它将帮助您进行内存管理。