当前位置: 首页 > 后端技术 > Java

Java中的clone()和new哪个更有效?

时间:2023-04-01 15:08:14 Java

对象创建方法:使用new关键字并使用clone方法反射机制反序列化以上四种类型可以生成java对象1、3会明确显式调用构造函数2是在内存中对现有对象的影印不会调用构造函数4.类的对象从文件中恢复,不会调用构造函数。什么是克隆()?复制对象返回一个新的对象,而不是对象的引用地址;复制对象已经包含了原对象的信息,而不是对象的初始信息,即每次复制动作都不是为了创建一个新对象。clone()和new哪个更快?使用clone复制内存中的数据块,复制已有的对象,也是一种生成对象的方式。前提是该类实现了Cloneable接口。Cloneable接口没有方法,是一个空接口。这样的接口也可以称为标记接口。只有实现了该接口才能支持克隆操作。有人会问,java中的对象都有一个默认的父类Object。Object中有clone方法,为什么还要实现Cloneable接口呢?这就是cloneable接口的意义所在。实现了Cloneable接口。如果没有实现,会报CloneNotSupportedException。类似的接口还有Seri??alizable接口、RandomAccess接口等。另外值得一提的是,clone操作时不会调用构造函数。另外,clone操作也会面临深拷贝和浅拷贝的问题。关于这个问题,网上有很多相关知识,这里不再赘述。由于通过复制操作得到的对象不需要调用构造函数,它只是内存中数据块的一份副本。复制对象的效率就一定比new快吗?答:没有。显然jvm的开发者也意识到通过new生成对象占据了开发者生成的大部分对象,所以他们优化了使用new操作生成对象。例如:packagecom.miivii.javalib;公共类Bean实现Cloneable{私有字符串名称;publicBean(Stringname){this.name=name;}@OverrideprotectedBeanclone()throwsCloneNotSupportedException{return(Bean)super.clone();}}packagecom.miivii.javalib;publicclassTestClass{privatestaticfinalintCOUNT=10000*1000;publicstaticvoidmain(String[]args)抛出CloneNotSupportedException{longs1=System.currentTimeMillis();for(inti=0;i