最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?中的?clone(?)?和?new哪個(gè)效率更高

 更新時(shí)間:2021年12月07日 09:57:15   作者:Java技術(shù)棧  
很多朋友不太清楚clone()和new那個(gè)更快?針對(duì)這個(gè)問題我百度了好多資料,最終小編總結(jié)下關(guān)于Java?中的?clone(?)?和?new哪個(gè)效率更高的問題,感興趣的朋友跟隨小編一起看看吧

對(duì)象創(chuàng)建的幾種方法:

  1. 使用new關(guān)鍵字
  2. 使用clone方法
  3. 反射機(jī)制
  4. 反序列化

以上四種都可以產(chǎn)生java對(duì)象

  • 1,3都會(huì)明確的顯式的調(diào)用構(gòu)造函數(shù)
  • 2是在內(nèi)存上對(duì)已有對(duì)象的影印 所以不會(huì)調(diào)用構(gòu)造函數(shù)
  • 4是從文件中還原類的對(duì)象 也不會(huì)調(diào)用構(gòu)造函數(shù)

何為clone()?

  1. 拷貝對(duì)象返回的是一個(gè)新的對(duì)象,而不是一個(gè)對(duì)象的引用地址;
  2. 拷貝對(duì)象已經(jīng)包含原來對(duì)象的信息,而不是對(duì)象的初始信息,即每次拷貝動(dòng)作不是針對(duì)一個(gè)全新對(duì)象的創(chuàng)建。

clone()和new那個(gè)更快?

利用clone,在內(nèi)存中進(jìn)行數(shù)據(jù)塊的拷貝,復(fù)制已有的對(duì)象,也是生成對(duì)象的一種方式。前提是類實(shí)現(xiàn)Cloneable接口,Cloneable接口沒有任何方法,是一個(gè)空接口,也可以稱這樣的接口為標(biāo)志接口,只有實(shí)現(xiàn)了該接口,才會(huì)支持clone操作。有的人也許會(huì)問了,java中的對(duì)象都有一個(gè)默認(rèn)的父類Object。

Object中有一個(gè)clone方法,為什么還必須要實(shí)現(xiàn)Cloneable接口呢,這就是cloneable接口這個(gè)標(biāo)志接口的意義,只有實(shí)現(xiàn)了這個(gè)接口才能實(shí)現(xiàn)復(fù)制操作,因?yàn)閖vm在復(fù)制對(duì)象的時(shí)候,會(huì)檢查對(duì)象的類是否實(shí)現(xiàn)了Cloneable這個(gè)接口,如果沒有實(shí)現(xiàn),則會(huì)報(bào)CloneNotSupportedException異常。類似這樣的接口還有Serializable接口、RandomAccess接口等。

還有值得一提的是在執(zhí)行clone操作的時(shí)候,不會(huì)調(diào)用構(gòu)造函數(shù)。還有clone操作還會(huì)面臨深拷貝和淺拷貝的問題。關(guān)于這方面的問題,網(wǎng)上有很多的相關(guān)知識(shí)了,不再累述了。由于通過復(fù)制操作得到對(duì)象不需要調(diào)用構(gòu)造函數(shù),只是內(nèi)存中的數(shù)據(jù)塊的拷貝,那是不是拷貝對(duì)象的效率是不是一定會(huì)比new的時(shí)候的快。

答案:不是。顯然jvm的開發(fā)者也意識(shí)到通過new方式來生成對(duì)象占據(jù)了開發(fā)者生成對(duì)象的絕大部分,所以對(duì)于利用new操作生成對(duì)象進(jìn)行了優(yōu)化。

例如:

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));
    }
}

打印結(jié)果:

new完勝clone,真的是這樣嗎?

下面在構(gòu)造函數(shù)里做點(diǎn)簡(jiǎn)單的事情,例如字符串截取試試。只是修改Bean,其他不變?cè)倏创蛴?/p>

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();
    }
}

結(jié)論:輕量級(jí)的對(duì)象可以使用new,其他對(duì)象可以使用clone。

到此這篇關(guān)于Java 中的 clone( ) 和 new哪個(gè)效率更高的文章就介紹到這了,更多相關(guān)Java clone( ) 和 new內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring使用注解和配置文件配置事務(wù)

    Spring使用注解和配置文件配置事務(wù)

    這篇文章主要為大家詳細(xì)介紹了Spring使用注解和配置文件配置事務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java參數(shù)傳遞及值傳遞實(shí)現(xiàn)原理詳解

    Java參數(shù)傳遞及值傳遞實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Java參數(shù)傳遞及值傳遞實(shí)現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • GC參考手冊(cè)二java中垃圾回收原理解析

    GC參考手冊(cè)二java中垃圾回收原理解析

    由于有個(gè)垃圾回收機(jī)制,java中的額對(duì)象不在有“作用域”的概念,只有對(duì)象的引用才有“作用域”。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用空閑的內(nèi)存<BR>
    2022-01-01
  • Java中@DS+@Transactional注解切換數(shù)據(jù)源失效解決方案

    Java中@DS+@Transactional注解切換數(shù)據(jù)源失效解決方案

    本文主要介紹了@DS+@Transactional注解切換數(shù)據(jù)源失效解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Spring Security單項(xiàng)目權(quán)限設(shè)計(jì)過程解析

    Spring Security單項(xiàng)目權(quán)限設(shè)計(jì)過程解析

    這篇文章主要介紹了Spring Security單項(xiàng)目權(quán)限設(shè)計(jì)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java8新特性之Optional的深入解析

    java8新特性之Optional的深入解析

    這篇文章主要給大家介紹了關(guān)于java8新特性之Optional的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • spring的13個(gè)經(jīng)典面試題

    spring的13個(gè)經(jīng)典面試題

    Spring框架是一個(gè)開放源代碼的J2EE應(yīng)用程序框架,是針對(duì)bean的生命周期進(jìn)行管理的輕量級(jí)容Spring解決了開發(fā)者在J2EE開發(fā)中遇到的許多常見的問題,我們這篇文章就來了解一下spring的面試題
    2021-06-06
  • Maven項(xiàng)目改為spring boot項(xiàng)目的方法圖解

    Maven項(xiàng)目改為spring boot項(xiàng)目的方法圖解

    這篇文章主要介紹了Maven項(xiàng)目改為spring boot項(xiàng)目的方法圖解 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • Spring?Bean名稱不會(huì)被代理的命名技巧

    Spring?Bean名稱不會(huì)被代理的命名技巧

    Spring Bean一些使用小細(xì)節(jié)就是在不斷的源碼探索中逐步發(fā)現(xiàn)的,今天就來和小伙伴們聊一下通過 beanName 的設(shè)置,可以讓一個(gè) bean 拒絕被代理
    2023-11-11
  • maven項(xiàng)目在實(shí)踐中的構(gòu)建管理之路的方法

    maven項(xiàng)目在實(shí)踐中的構(gòu)建管理之路的方法

    這篇文章主要介紹了maven項(xiàng)目在實(shí)踐中的構(gòu)建管理之路的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05

最新評(píng)論

关岭| 诸暨市| 安塞县| 襄汾县| 孟村| 柳江县| 大荔县| 德安县| 卓尼县| 闵行区| 濮阳市| 安阳市| 兴国县| 寿宁县| 三穗县| 桃江县| 万盛区| 涟源市| 苏尼特右旗| 邳州市| 元朗区| 长海县| 东明县| 泾阳县| 定安县| 上思县| 南郑县| 呼和浩特市| 巧家县| 永登县| 英吉沙县| 扎赉特旗| 元江| 子长县| 乐陵市| 景德镇市| 乡宁县| 绥阳县| 蒙阴县| 古蔺县| 乃东县|