将object的所有引用设置为null

时间:2015-11-08 16:05:22

标签: java reference

在Java中,我将如何执行以下操作:

if(!$this->db->insert_id()){
    $query=$this->db    ->where('xyz', $data['xyz'])
                        ->update('my_table',$data);
};  

是否可以将变量Foo bar = new Foo(); Foo a = bar; Foo b = bar; bar = null;//will only set bar to null. want to set value of bar to null rather than the reference to null. bara(所有都是对b的引用)设置为null,只有访问bar?如果是这样,有人可以解释如何这样做。

3 个答案:

答案 0 :(得分:5)

这在Java中是不可能的。您无法使用a设置引用bbar null。

原因 - Java pass by value而非pass by reference

答案 1 :(得分:5)

不,在Java中是不可能的。

我稍微解释一下你的代码中发生了什么。 在Foo bar = new Foo(); {}创建了Foo的对象,并引用变量bar

此处Foo a = bar;Foo b = bar;您引用了变量ab。所以你现在有一个对象和三个指向他的变量。

在这里bar = null;清除bar变量。因此,您有两个指向对象的变量(ab)以及一个没有引用的变量(bar)。

答案 2 :(得分:2)

在C中没有像Java那样的析构函数

如果您知道要将多个对象设置为null,那么您可能会使用Foo数组而不是将它们声明为单独的对象。然后使用循环进行consturctor调用,instatiation / initialization。

Foo bar = new Foo();
Foo array[2]
for (int i=0; i<array.length; i++) {
    array[i] = bar;
}

然后你可以在最后使用一个循环

for (int i=0; i<array.length; i++) {
    array[i] = null;
}

这是数据结构所需的策略,因为您可以处理任意数量的对象,用于递归等。