在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.
,bar
和a
(所有都是对b
的引用)设置为null,只有访问bar?如果是这样,有人可以解释如何这样做。
答案 0 :(得分:5)
这在Java中是不可能的。您无法使用a
设置引用b
和bar
null。
原因 - Java pass by value
而非pass by reference
。
答案 1 :(得分:5)
不,在Java中是不可能的。
我稍微解释一下你的代码中发生了什么。
在Foo bar = new Foo();
{}创建了Foo
的对象,并引用变量bar
。
此处Foo a = bar;
和Foo b = bar;
您引用了变量a
和b
。所以你现在有一个对象和三个指向他的变量。
在这里bar = null;
清除bar
变量。因此,您有两个指向对象的变量(a
和b
)以及一个没有引用的变量(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;
}
这是数据结构所需的策略,因为您可以处理任意数量的对象,用于递归等。