考虑代码
String s="hello";
s=s.concat("java");
由于String对象是不可变的,因此应使用S引用的值“Hello Java”创建新对象。
现在我的查询是,s先前引用的早期String对象“hello”在哪里?
它是否仍然存在于内存中?如果是的话怎么样? 因为在Java中,对象的生命周期仍然存在,直到它的引用存在。 在“hello”的情况下,当第二个语句执行时,它的引用已经丢失。 那怎么能在记忆中存在呢???
请有人解决我的疑问。 :)
答案 0 :(得分:8)
它是否仍然存在于内存中?
是。 s
变量不再引用它。
它将继续存在于常量池中,因为您已将其声明为字符串文字;即使它不在恒定池中,它也会继续存在,直到它被垃圾收集,这不会立即发生。