情况1:
Object x = y
y = z
x = null
*其中y和z具有相同的对象类型。
案例2:
y = z
我基本上想要将y设置为z并删除y(将其设置为null)。案例1会这样做吗?如果确实如此,那该怎么办呢?
第一个选项创建一个新变量x
,最终设置为null,并将y
设置为与z
相同的对象。
第二个选项只是将y
设置为与z
相同的对象。
两个选项都没有删除任何内容。如果你想将z
设置为null,你需要z = null
。如果你想将y
设置为null,你需要y = null
。将另一个变量设置为null不会影响您的其他变量或它们引用的对象。
当一个对象没有引用它的剩余变量时,它有资格进行垃圾回收。
在Java中,某个类'type的变量不是该类本身的对象,它只是有可能保存对该类对象的引用。可以把它想象成能够知道对象“生活”的对象地址的变量。考虑到这一点,请看下面的一些示例:
Foo var;
在上面的示例中,您只需声明一个“Foo”类型的变量。它没有任何对象的引用。试图在其上调用方法将抛出零点异常。
var = new Foo();
在这里,您告诉变量var保存一个引用(“地址”),该引用指向类“Foo”类的新创建的对象。该对象是使用关键字“new”显式创建的。现在,您可以在新对象上调用方法。
理解了这一点后,重要的是要知道,在Java中,没有办法明确删除对象。 Java的垃圾收集器为您处理此问题。当没有对象的引用时(意味着没有变量保存对象的“地址”的副本),垃圾收集器会自动删除它。所以,基本上,如果你想摆脱一个对象,只要确保你的变量都没有引用它。您可以这样做,例如,通过将变量的值设置为null,如下所示:
var = null; //if no other variables hold a reference to the object created in the 2nd example, it will be deleted by the GC.
答案最终很长。我自己是初学者,我很喜欢研究这些东西。我希望这对你以及像我们这样的任何其他初学者都有帮助。干杯!