考虑本准则
String variable = "";
variable = "3";
variable = "4";
由于字符串是不可变的,因此将创建三个对象。但只有最后一个赋值给“4”的对象是有效的。
根据定义,前几行中使用的对象(变量=“3”和变量=“”)仍在内存中。
我的问题是,当一个对象不再被引用时,我还能称它为对象还是只是一个不可用的内存位置
考虑本准则
String variable = "";
variable = "3";
variable = "4";
由于字符串是不可变的,因此将创建三个对象。但只有最后一个赋值给“4”的对象是有效的。
根据定义,前几行中使用的对象(变量=“3”和变量=“”)仍在内存中。
我的问题是,当一个对象不再被引用时,我还能称它为对象还是只是一个不可用的内存位置
对象永远是对象。如果它是可达的,则在下一个 GC 周期没有资格进行 GC。否则有资格获得 GC。
对于初学者,不会在一般堆中创建字符串对象,它们宁愿驻留在字符串池中。因此,即使“”和“3”没有被任何变量引用,它们仍然会留在池中,等待将来使用(或销毁)。所以不,它们不在不可用的内存位置。
为了回答您的问题,它们仍将被称为对象。
我认为您仍然可以将其称为对象,因为您可以将其与 this.variable="3"; 一起使用 也许
它们不再被代码引用,实际上只是内存中某个位置的字节模式,但它们仍然是对象。GC 必须获得对象的句柄,以便最终确定它。所以它们仍然作为对象“起作用”......