这两个有什么区别2.更改对象引用和删除

时间:2018-09-01 19:45:35

标签: java object reference variable-assignment

案例1:

<?php
echo 'Hi I'm ' . $_POST['month']; ?>

*其中y和z属于同一对象类型。

案例2:

Object x = y
y = z
x = null

我基本上想将y设置为z并删除y(将其设置为null)。案例1会这样做吗?如果可以,那该如何精确地工作?

3 个答案:

答案 0 :(得分:3)

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

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

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

当对象没有 no 个剩余变量引用该对象时,就可以进行垃圾回收。

答案 1 :(得分:3)

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

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

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

案例1的工作方式不像您想象的那样,x = null;意味着x没有指向任何对象,它没有明确删除所指向的对象。

这里是视觉表示:

cases

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

答案 2 :(得分:0)

在Java中,某个类类型的变量不是该类本身的对象,它仅具有保留对该类对象的引用的潜力。可以将其视为能够知道对象“所在”位置的对象的变量。考虑到这一点,请看下面的一些示例:

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.

答案很长。我本人还是一个初学者,我喜欢研究这些东西。我希望这对您以及像我们这样的其他初学者都可以有所帮助。干杯!