-5

考虑本准则

String variable = "";
variable = "3";
variable = "4";

由于字符串是不可变的,因此将创建三个对象。但只有最后一个赋值给“4”的对象是有效的。

根据定义,前几行中使用的对象(变量=“3”和变量=“”)仍在内存中。

我的问题是,当一个对象不再被引用时,我还能称它为对象还是只是一个不可用的内存位置

4

4 回答 4

1

对象永远是对象。如果它是可达的,则在下一个 GC 周期没有资格进行 GC。否则有资格获得 GC。

于 2012-07-23T14:54:38.697 回答
1

对于初学者,不会在一般堆中创建字符串对象,它们宁愿驻留在字符串池中。因此,即使“”和“3”没有被任何变量引用,它们仍然会留在池中,等待将来使用(或销毁)。所以不,它们不在不可用的内存位置。

为了回答您的问题,它们仍将被称为对象。

于 2012-07-23T14:57:10.577 回答
0

我认为您仍然可以将其称为对象,因为您可以将其与 this.variable="3"; 一起使用 也许

于 2012-07-23T14:54:48.673 回答
0

它们不再被代码引用,实际上只是内存中某个位置的字节模式,但它们仍然是对象。GC 必须获得对象的句柄,以便最终确定它。所以它们仍然作为对象“起作用”......

请参阅:Java 中何时调用 finalize() 方法?

于 2012-07-23T14:57:58.093 回答