iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java 中的 clone( ) 和 new哪个效率更高
  • 503
分享到

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

2024-04-02 19:04:59 503人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

对象创建的几种方法: 使用new关键字 使用clone方法 反射机制 反序列化 以上四种都可以产生java对象 1,3都会明确的显式的调

对象创建的几种方法:

  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哪个效率更高的文章就介绍到这了,更多相关Java clone( ) 和 new内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java 中的 clone( ) 和 new哪个效率更高

本文链接: https://www.lsjlt.com/news/159304.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 中的 clone( ) 和 new哪个效率更高
    对象创建的几种方法: 使用new关键字 使用clone方法 反射机制 反序列化 以上四种都可以产生java对象 1,3都会明确的显式的调...
    99+
    2024-04-02
  • Java中clone( ) 和 new效率更高的是哪个
    这篇文章主要介绍Java中clone( ) 和 new效率更高的是哪个,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!对象创建的几种方法:使用new关键字使用clone方法反射机制反序列化...
    99+
    2023-06-21
  • Linux大文件重定向和管道的效率哪个更高
    这篇文章主要讲解了“Linux大文件重定向和管道的效率哪个更高”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux大文件重定向和管道的效率哪个更高”吧!# 命令1,管道导入&n...
    99+
    2023-06-16
  • 比较Golang和Python的性能:哪个更高效?
    Golang和Python的性能对比:谁更胜一筹? 随着软件开发行业的迅猛发展,选择一种既高效又适用的编程语言变得尤为重要。本文将探讨两种流行的编程语言——Golang和Python的性能对比,旨在帮助读者了...
    99+
    2024-01-20
    Python Golang 性能比较
  • 文件处理中,Python的Numpy和Django的哪个更为高效?
    Python作为一种高级编程语言,可以在许多应用程序中使用。文件处理是其中一个常见的应用程序,它涉及到读取和写入文件,处理文件中的数据和信息等。在Python中,Numpy和Django是两个常用的库,它们都可以用于文件处理。但是,哪一个更...
    99+
    2023-06-01
    numpy django 文件
  • Python Shell和IDE:哪个能够提高Windows用户的效率?
    Python作为一种流行的编程语言,已经成为了许多程序员的首选。在Windows操作系统上,Python提供了两种主要的编程环境:Python Shell和Python IDE。那么,哪一种环境能够更有效地提高Windows用户的效率呢?...
    99+
    2023-08-02
    shell ide windows
  • ASP、Bash、Linux 和 NumPy:哪个能够提高您的编程效率?
    ASP、Bash、Linux和NumPy:哪个能够提高您的编程效率? 在当今的技术领域中,有很多编程语言和工具可以用来提高您的编程效率。在这篇文章中,我们将比较ASP、Bash、Linux和NumPy这四个工具的优劣,以帮助您决定哪个工具最...
    99+
    2023-09-09
    bash linux numpy
  • Python中的字符串查找和替换效率最高的方法是哪个?
    Python中的字符串查找和替换效率最高的方法是哪个?在Python中,字符串是常用的数据类型之一,我们经常需要对字符串进行查找和替换操作。那么,在进行字符串查找和替换时,有哪些方法是效率最高的呢?本文将为你介绍Python中字符串查找和替...
    99+
    2023-10-22
    字符串查找和替换
  • Java和JavaScript:如何在Shell编程中提高效率?
    Shell编程是一种常用的脚本编程语言,它可以在Linux和Unix系统上自动化执行命令和任务。然而,由于Shell本身的限制,编写复杂的脚本可能会变得比较困难。在这种情况下,使用Java和JavaScript可以提高Shell编程的效率...
    99+
    2023-11-11
    javascript shell 关键字
  • 分布式计算中,Python和NumPy究竟哪个更加高效?
    随着数据量和计算规模的不断增加,分布式计算已经成为了当今计算领域的重要研究方向。在分布式计算中,选择合适的编程语言和工具是至关重要的,因为它们直接关系到计算效率和性能。Python和NumPy是两个非常流行的工具,它们在分布式计算中的性能如...
    99+
    2023-10-20
    numpy leetcode 分布式
  • 让你效率更高的CSS代码技巧有哪些
    这篇文章主要为大家展示了“让你效率更高的CSS代码技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“让你效率更高的CSS代码技巧有哪些”这篇文章吧。 1...
    99+
    2024-04-02
  • Java中LinkedList和ArrayList的效率分析
    在 Java 中,LinkedList 和 ArrayList 的性能是不同的,具体取决于你所需要的操作。 对于频繁的插入和删除操作,LinkedList 的性能通常更好,因为它使用...
    99+
    2023-02-10
    Java LinkedList和ArrayList效率 Java LinkedList ArrayList
  • 怎样提高mysql中or和in的效率
    怎样提高mysql中or和in的效率,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言今天遇到了一个网站卡死的问题,过了几分钟...
    99+
    2024-04-02
  • Java 和 Unix:如何提高同步响应的效率?
    Java 和 Unix 都是广泛使用的编程语言和操作系统。在编写高效的应用程序时,同步响应的效率是非常重要的因素。本文将介绍一些技巧和最佳实践,帮助您提高 Java 和 Unix 中同步响应的效率。 一、Java 中的同步响应 Java ...
    99+
    2023-09-27
    unix 同步 响应
  • 提高效率的Java代码小技巧有哪些
    提高效率的Java代码小技巧有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改...
    99+
    2023-06-16
  • Java和Unix Shell:哪个更适合高负载环境?
    Java和Unix Shell:哪个更适合高负载环境? 在高负载环境下,选择正确的编程语言和工具非常重要。Java和Unix Shell都是广泛使用的编程语言和工具,但是它们在高负载环境下的表现如何呢?本文将探讨Java和Unix Shel...
    99+
    2023-08-02
    unix load shell
  • StringUtils,CollectionUtils判断为空的方法和原生代码哪个效率最高
    目录StringUtils,CollectionUtils判断为空的方法和原生代码哪个效率高结论 isBlank与isEmpty区别CollectionUtils封装类,判...
    99+
    2024-04-02
  • Java 容器中的 Git 和 JavaScript:如何提高项目管理效率?
    在软件开发中,项目管理是至关重要的一环。在项目管理中,代码版本控制和任务跟踪是必不可少的步骤。这两个步骤都需要使用到一些工具来帮助我们提高效率。在本文中,我们将介绍如何使用 Java 容器中的 Git 和 JavaScript 来提高项目...
    99+
    2023-09-12
    容器 git javascript
  • MySQL中的count(*)与count(1)哪个效率快
    这篇文章主要介绍了MySQL中的count(*)与count(1)哪个效率快,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先说结论:这两个性能差别不大。1.实践我准备了一张有...
    99+
    2023-06-29
  • LeetCode上的Java和JavaScript:哪个更快?
    LeetCode是一个非常受欢迎的在线编程平台,它提供了大量的算法和数据结构题目,帮助程序员提高他们的编程技能。在LeetCode上,Java和JavaScript是两种最常用的编程语言。但是,哪种语言更快?在本文中,我们将探讨Java和J...
    99+
    2023-09-29
    load leetcode javascript
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作