这些之间有什么区别2.更改对象引用和删除

问题描述 投票:-2回答:3

情况1:

Object x = y
y = z
x = null

*其中y和z具有相同的对象类型。

案例2:

y = z

我基本上想要将y设置为z并删除y(将其设置为null)。案例1会这样做吗?如果确实如此,那该怎么办呢?

java object reference variable-assignment
3个回答
3
投票

在Java中,没有显式删除的概念。

垃圾收集器会自动删除没有指向它们的引用的对象。

因此,如果y = z;先前指向的对象没有指向它的其他引用,那么y就足够了。

案例1不像你想象的那样工作,x = null;意味着x指向什么,它没有明确删除指向的对象。

这是一个直观的表示:

cases

如果对象没有其他引用,则为红色,因此将被垃圾回收器删除。


3
投票

第一个选项创建一个新变量x,最终设置为null,并将y设置为与z相同的对象。

第二个选项只是将y设置为与z相同的对象。

两个选项都没有删除任何内容。如果你想将z设置为null,你需要z = null。如果你想将y设置为null,你需要y = null。将另一个变量设置为null不会影响您的其他变量或它们引用的对象。

当一个对象没有引用它的剩余变量时,它有资格进行垃圾回收。


0
投票

在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.

答案最终很长。我自己是初学者,我很喜欢研究这些东西。我希望这对你以及像我们这样的任何其他初学者都有帮助。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.