什么是VB6或Java中的对象克隆?我们在什么情况下使用克隆?克隆对象是什么意思?请举个例子说明。
什么是VB6或Java中的对象克隆?我们在什么情况下使用克隆?克隆对象是什么意思?请举个例子说明。
克隆实际上是将对象数据复制到一个新的对象中。
这个例子并没有克隆数据:
Foo p = new Foo();
Foo o = p;
如果Foo
有一个成员a
,并且您更改了p.a
,那么o.a
也会更改,因为p
和o
都指向同一对象。
然而,
Foo p = new Foo();
Foo o = p.Clone();
如果你改变p.a
,那么o.a
不会改变,因为它们实际上指向不同的对象。
事实上,有两种不同的克隆方式:浅克隆和深克隆。
浅克隆只是创建一个新的对象并将成员复制到新对象中。这意味着如果其中一个成员实际上是指向另一个对象的指针,则该对象将在旧对象和新对象之间共享。
深克隆实际上会遍历并将所有成员克隆到新对象中。这样对象就是所有数据的完整副本。
一般来说,对象是通过引用传递的。因此,如果你说 $objB=$objA
,你并没有得到一个新的对象;你得到的是一个同一对象的新名称。但是,如果你说 $objB= clone $objA
,你就会得到一个 $objA
的副本。在第一种情况下,无论你对 $objB
做什么,都会发生在 $objA
上。而在第二种情况下,$objB
是独立的。