有一个测试类Student如下:
public class Student implements Cloneable { @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } }测试代码demo:
import com.example.goodforjava.entity.Student; public class Test { public static void main(String[] args) throws CloneNotSupportedException { long startTime = System.currentTimeMillis(); Student student = new Student(); //克隆循环十万次 for (int i = 0; i < 100000; i++) { student.clone(); } long midTime = System.currentTimeMillis(); System.out.println("克隆生成对象耗费的时间:" + (midTime - startTime) + "ms"); //new10万次 for (int i = 0; i < 100000; i++) { new Student(); } System.out.println("new生成对象耗费的时间:" + (System.currentTimeMillis() - midTime) + "ms"); } }运行结果如下: 从输出结果可以看出,同样是10万次,new生成对象的效率比克隆生成对象的效率比高了75%左右。
总结
大部分情况下使用new来生成对象是正确的决定,因为JVM对new做了相应的性能优化,不过如果构造函数的逻辑很复杂,此时通过new创建该对象会比较耗时,那么就可以尝试使用克隆来生成对象,但是使用克隆就得注意浅拷贝和深拷贝的问题了。