【发布时间】:2009-11-17 15:19:46
【问题描述】:
什么是 vb6 或 java 中的对象克隆?我们在什么情况下使用克隆?克隆对象是什么意思?谁能告诉我一个例子吗?
【问题讨论】:
-
对于有经验的人来说似乎很明显,但初学者经常会遇到“嘿,为什么我的对象在我改变了这个'另一个'时改变了”。名称基本上是修饰指针的认识来得很慢(并且理解克隆大大加快了这个过程)。
标签: clone
什么是 vb6 或 java 中的对象克隆?我们在什么情况下使用克隆?克隆对象是什么意思?谁能告诉我一个例子吗?
【问题讨论】:
标签: clone
克隆实际上是将对象数据复制到一个新对象中。
这个例子没有克隆数据:
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 是独立的。
【讨论】: