当我们想为某个类创建新对象时,如果我们已经有了一个,我们应该使用clone()还是使用new关键字实例化?
是的,clone()也会复制所有成员,但我很好奇这个无关紧要的情况。
ClassType foo = new ClassType();
ClassType bar = new ClassType(); // here, will foo.clone() be better choice?
我在目前的任务中需要这个,因为我正在使用通用列表(列表<
T >
),这些列表有时很大并且在实际上通过'n'层之前传递用于UI。(它们之间转换为Array并返回列表以用于序列化目的)。所以,我只是想提高性能。
答案 0 :(得分:7)
Clone()
无论如何都会new
,所以为什么要这么麻烦?
调用Clone()
无论如何都会产生新的引用,最重要的是复制所有成员,所以它肯定会慢一些。
答案 1 :(得分:6)
听起来你正在做过早的优化。简介,您通常会在时间进展中感到惊讶。我怀疑它会在这里,除非你的“克隆”使用序列化。
那说; ICloneable.Clone()
值得避免,因为它定义不清楚(深度与浅度)并且很少得到支持。在幕后,大多数Clone()
实现只需执行new(); // now copy properties
,或者使用序列化。
答案 2 :(得分:4)
克隆旨在生成一个与原始对象相同(或多或少 - 即深与浅 - 即雷区)的对象,与新实现不同的目的仅仅是实例化不相关的类实例。
摘要:它们用于不同的目的,它们不可互换。
答案 3 :(得分:3)
clone
必须分配一个新对象(即,它在某处调用new
),因此它不可能表现得更好。换句话说,new
性能是clone
性能的下限。
答案 4 :(得分:2)
.clone肯定比较慢。
答案 5 :(得分:1)
我想象新的,因为克隆将不得不在背景中新建对象,加上常规克隆职责。
和往常一样,如果有疑问,请简介!
答案 6 :(得分:1)
这取决于构造函数中完成的工作量。 Clone()会将每个成员值从第一个类复制到第二个类。你的构造函数是做更多还是更少的工作?答案应该告诉你。