这个问题是基于Java 中的 Thinking,第 2 版,第 109 页的Scope of Object章节,它说当我们使用new创建 Java 对象时,它会在范围结束时徘徊。它给出了这个例子:
{
String s = new String("a string");
} /* end of scope */
然后它说,
引用 s在范围结束时消失。但是,s 指向的 String 对象仍在占用内存。在这段代码中,无法访问该对象,因为对它的唯一引用超出了范围。
因此,如果我理解正确,文本“a string”仍然存在于内存中,但具有第一个字符'a'的内存地址的指针不存在。这就是它的意思吗?
它接着说,
事实证明,因为用 new 创建的对象只要你想要它们就一直存在,一大堆 C++ 编程问题在 Java 中就消失了。
为什么这会是有利的?在上面的示例中,字符串数据继续驻留在内存中,无法访问它(因为指针在超出范围后被销毁),这只会消耗资源。