案例1:
<?php
echo 'Hi I'm ' . $_POST['month']; ?>
*其中y和z属于同一对象类型。
案例2:
Object x = y
y = z
x = null
我基本上想将y设置为z并删除y(将其设置为null)。案例1会这样做吗?如果可以,那该如何精确地工作?
答案 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
没有指向任何对象,它没有明确删除所指向的对象。
这里是视觉表示:
如果该对象没有其他引用,则显示为红色,因此将被垃圾收集器删除。
答案 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.
答案很长。我本人还是一个初学者,我喜欢研究这些东西。我希望这对您以及像我们这样的其他初学者都可以有所帮助。干杯!