什么是vb6或java中的对象克隆?在什么情况下我们使用克隆?克隆对象意味着什么?任何人都可以通过示例告诉我。
答案 0 :(得分:10)
克隆实际上是将对象数据复制到一个新对象中。
此示例不克隆数据:
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
保持不变,因为它们实际指向不同的对象。
实际上有两种不同的克隆方式:浅克隆或深克隆。
浅层克隆只生成一个新对象并将成员复制到新对象中。这意味着如果其中一个成员实际上是指向另一个对象的指针,那么该对象将在旧对象和新对象之间共享。
深度克隆实际上会通过并将所有成员克隆到新对象中。这样,对象就是所有数据的完整副本。
答案 1 :(得分:2)
一般来说,对象通过引用传递。所以如果你说$objB=$objA
你没有得到一个新的对象;您正在获取同一对象的新名称。但是,如果您说$objB= clone $objA
,则会获得$objA
的副本。在第一种情况下,无论您对$objB
所做的一切都发生在$objA
。在第二种情况下,$objB
是独立的。