java new 和 clone 的效率比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java new 和 clone 的效率比较相关的知识,希望对你有一定的参考价值。
对于生成新的对象,我们常常用new,但是new看起来不是那么的快速,好像是个很费资源的操作,而clone看起来比new要好的多,来程序对比一下:
首先建立一个测试类,对此类进行new和clone操作,Test1.java:
public class Test1 implements Cloneable{ String str; public Test1(String str){ this.str=str; } public Test1 clone() throws CloneNotSupportedException{ return (Test1)super.clone(); } }
主程序启动测试:分别进行10000000次new和clone,查看所用时间:
public class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { long t1=System.currentTimeMillis(); for(int i=0;i<10000000;i++){ Test1 s1= new Test1("test"); } long t2=System.currentTimeMillis(); Test1 s1=new Test1("test"); for(int j=0;j<10000000;j++){ Test1 s2=s1.clone(); } long t3=System.currentTimeMillis(); System.out.println(t2-t1); System.out.println(t3-t2); } }
结果:
可以看出,对于此类操作,new要比clone省时10倍左右,但是对于稍微复杂一点的对象呢?我们在Test1.java的构造方法里增加一些操作:修改后
public class Test1 implements Cloneable{ String str; public Test1(String str){ if(str.startsWith("r")){ str="aaaaaaa"; } str.replaceAll("es", "aa"); this.str=str; } public Test1 clone() throws CloneNotSupportedException{ return (Test1)super.clone(); } }
再次运行:结果:
可以看出这里的new操作耗费了很长的时间,可以说是差距非常大,所以得出结论,对于轻量型对象,new更好,对于构造方法有些逻辑操作的对象,合理的使用clone能提升性能。
需要注意的是clone操作只是一个浅克隆,只会对克隆对象的变量值进行克隆,而不会对变量值指向的对象进行克隆,所以克隆有风险,操作需谨慎
以上是关于java new 和 clone 的效率比较的主要内容,如果未能解决你的问题,请参考以下文章