千家信息网

Java中clone( ) 和 new效率更高的是哪个

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍Java中clone( ) 和 new效率更高的是哪个,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!对象创建的几种方法:使用new关键字使用clone方法反射机
千家信息网最后更新 2026年11月01日Java中clone( ) 和 new效率更高的是哪个

这篇文章主要介绍Java中clone( ) 和 new效率更高的是哪个,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

对象创建的几种方法:

  1. 使用new关键字

  2. 使用clone方法

  3. 反射机制

  4. 反序列化

以上四种都可以产生java对象

  • 1,3都会明确的显式的调用构造函数

  • 2是在内存上对已有对象的影印 所以不会调用构造函数

  • 4是从文件中还原类的对象 也不会调用构造函数

何为clone()?

  1. 拷贝对象返回的是一个新的对象,而不是一个对象的引用地址;

  2. 拷贝对象已经包含原来对象的信息,而不是对象的初始信息,即每次拷贝动作不是针对一个全新对象的创建。

clone()和new那个更快?

利用clone,在内存中进行数据块的拷贝,复制已有的对象,也是生成对象的一种方式。前提是类实现Cloneable接口,Cloneable接口没有任何方法,是一个空接口,也可以称这样的接口为标志接口,只有实现了该接口,才会支持clone操作。有的人也许会问了,java中的对象都有一个默认的父类Object。

Object中有一个clone方法,为什么还必须要实现Cloneable接口呢,这就是cloneable接口这个标志接口的意义,只有实现了这个接口才能实现复制操作,因为jvm在复制对象的时候,会检查对象的类是否实现了Cloneable这个接口,如果没有实现,则会报CloneNotSupportedException异常。类似这样的接口还有Serializable接口、RandomAccess接口等。

还有值得一提的是在执行clone操作的时候,不会调用构造函数。还有clone操作还会面临深拷贝和浅拷贝的问题。关于这方面的问题,网上有很多的相关知识了,不再累述了。由于通过复制操作得到对象不需要调用构造函数,只是内存中的数据块的拷贝,那是不是拷贝对象的效率是不是一定会比new的时候的快。

答案:不是。显然jvm的开发者也意识到通过new方式来生成对象占据了开发者生成对象的绝大部分,所以对于利用new操作生成对象进行了优化。

例如:

package com.miivii.javalib;public class Bean implements Cloneable {    private String name;    public Bean(String name) {        this.name = name;    }    @Override    protected Bean clone() throws CloneNotSupportedException {        return (Bean) super.clone();    }}package com.miivii.javalib;public class TestClass {    private static final int COUNT = 10000 * 1000;    public static void main(String[] args) throws CloneNotSupportedException {        long s1 = System.currentTimeMillis();        for (int i = 0; i < COUNT; i++) {            Bean bean = new Bean("ylWang");        }        long s2 = System.currentTimeMillis();        Bean bean = new Bean("ylWang");        for (int i = 0; i < COUNT; i++) {            Bean b = bean.clone();        }        long s3 = System.currentTimeMillis();        System.out.println("new  = " + (s2 - s1));        System.out.println("clone = " + (s3 - s2));    }}

打印结果:

new完胜clone,真的是这样吗?

下面在构造函数里做点简单的事情,例如字符串截取试试。只是修改Bean,其他不变再看打印

package com.miivii.javalib;public class Bean implements Cloneable {    private String name;    private String firstSign;//获取名字首字母    public Bean(String name) {        this.name = name;        if (name.length() != 0) {            firstSign = name.substring(0, 1);            firstSign += "abc";        }    }    @Override    protected Bean clone() throws CloneNotSupportedException {        return (Bean) super.clone();    }}

结论:轻量级的对象可以使用new,其他对象可以使用clone。

以上是"Java中clone( ) 和 new效率更高的是哪个"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

对象 接口 拷贝 函数 方法 生成 效率 内存 时候 信息 内容 只是 只有 开发者 数据 方式 是在 标志 知识 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技图片 美国互联网保险保险科技 科技与互联网发展 华宇互联网科技 期待互联网科技 亿策互联网科技 顺玮阁互联网科技 隆华科技工业互联网 广州优美互联网科技 常德市电业局互联网科技部 996高科技互联网公司 互联网科技如何创业 浙南科技城互联网大厦招聘 互联网科技包装股份有限公司上市 2021世界互联网领先科技成果发布 广州燕处互联网科技有限公司 上海同邻互联网科技有限公司规模 上海万顺科技互联网有限公司招聘 互联网金融金融科技 互联网的黑科技实验室 宜安科技 互联网金融 互联网科技项目计划书材料类 中国航天科技大学国际工业互联网 互联网科技扶贫时间 深圳育鹏互联网科技有限公司招聘 想开互联网科技公司怎么样 易企秀互联网科技是做什么的 互联网金融运营模式中的金融科技 长沙渺峰互联网科技有限公司 互联网领先科技成果宣传视频
0