DANCE WITH JAVA

开发出高质量的系统

常用链接

统计

积分与排名

好友之家

最新评论

Clone和New哪个更快

Clone和new哪个更快呢,这个问题的答案不是一定的,要根据实际情况决定:
情况一:对象简单,这个时候new更快,测试代码如下:
class TestObj implements Cloneable{
    
public Object clone(){
        Object obj 
= null ;
        
try{
            obj 
= super.clone();
        }
catch(Exception e){
        }

        
return obj;  
    }

}

public class CloneVsNew {
    
static void cloneTest(int time){
        TestObj obj
=new TestObj();
        
for(int i=0;i<time;i++){
            obj.clone();
        }

    }


    
static void newTest(int time) {
        TestObj obj
=new TestObj();
        
for(int i=0;i<time;i++){
            obj
=new TestObj();
        }

    }

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
long start;
        
long stop;
        
int times=1000000;
        
        System.gc();
        

        start
=System.currentTimeMillis();
        newTest(times);
        stop
=System.currentTimeMillis();
        System.out.println(
"newTest Time:"+(stop-start));
        
        System.gc();
        
        start
=System.currentTimeMillis();
        cloneTest(times);
        stop
=System.currentTimeMillis();
        System.out.println(
"cloneTest Time:"+(stop-start));
        
    }


}


情况二:对象复杂,例如一个包括集合类的类的对象。而且这个对象的Clone使用的浅拷贝。(其实快主要是快在这个地方)
不用例子了,浅拷贝只是引用的复制,肯定比复制快。

还有一些其它的情况,但总体来说,随着对象的复杂,clone越来越快,new越来越慢。不过在使用clone的时候
一定要想清楚再用,浅拷贝使用不当会出现很多问题。

posted on 2007-02-26 16:11 dreamstone 阅读(5589) 评论(7)  编辑  收藏 所属分类: jdk相关

评论

# re: Clone和New哪个更快 2007-02-26 20:40 lang

一般系统很少使用clone的吧,你怎么想起来比较这个了呢!?  回复  更多评论   

# re: Clone和New哪个更快 2007-02-26 22:57 hcom

我还不知道clone干什么用的呢?搂住能不能讲讲clone一般用在什么场合啊?  回复  更多评论   

# re: Clone和New哪个更快 2007-02-26 23:10 dreamstone

to lang:
比较这个是因为上一篇文章用到这个结论,当时想了一下,有点疑问随便测试了一下,把结果留下

  回复  更多评论   

# re: Clone和New哪个更快 2007-02-26 23:12 dreamstone

to hcom :
clone的使用方法,建议你看看Thinking in java写的。一些基础的东西Thinking in java讲的很好,容易理解而且覆盖也够广泛。  回复  更多评论   

# re: Clone和New哪个更快 2007-02-27 13:40 hcom

噢,有点明白了。

有些时候我们迫切需要一个与对象A相同的对象B,但是改变对象B的状态的时候不能改变对象A,这个时候用clone就可以拷贝一个对象A,而不是拷贝对象A的引用。clone出来的对象B是享有单独内存区域的,改变B不会影响A。

不知道这样理解对不对啊  回复  更多评论   

# re: Clone和New哪个更快 2007-02-27 14:34 dreamstone

to hcom:
你说的大概意思对,但是如果是深拷贝复合你说的情况,如果是浅拷贝则不是,而sun的jdk很多实现默认是浅拷贝的,如果你真的想用clone的话,还是建议你完整的看一下thinking in java(这书比较好找,网上很多电子书),或者别的书也可以。  回复  更多评论   

# re: Clone和New哪个更快 2015-08-10 12:39 jsolo

次数改成1千万,是new比较快,怎么解释?  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: