字符串不变性测试

时间:2016-01-26 13:59:25

标签: java string immutability

考虑代码

String s="hello";
s=s.concat("java");

由于String对象是不可变的,因此应使用S引用的值“Hello Java”创建新对象。

现在我的查询是,s先前引用的早期String对象“hello”在哪里?

它是否仍然存在于内存中?如果是的话怎么样? 因为在Java中,对象的生命周期仍然存在,直到它的引用存在。 在“hello”的情况下,当第二个语句执行时,它的引用已经丢失。 那怎么能在记忆中存在呢???

请有人解决我的疑问。 :)

1 个答案:

答案 0 :(得分:8)

  

它是否仍然存在于内存中?

是。 s变量不再引用它。

它将继续存在于常量池中,因为您已将其声明为字符串文字;即使它不在恒定池中,它也会继续存在,直到它被垃圾收集,这不会立即发生。