1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 1573字,需瀏覽 4分鐘

         ·

        2022-01-10 02:11

        程序員的成長之路
        互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享?
        關(guān)注


        閱讀本文大概需要 2.8 分鐘。

        來自:blog.csdn.net/iblade/article/details/80749148/

        對象創(chuàng)建的幾種方法:
        1. 使用new關(guān)鍵字
        2. 使用clone方法
        3. 反射機制
        4. 反序列化
        以上四種都可以產(chǎn)生java對象
        • 1,3都會明確的顯式的調(diào)用構(gòu)造函數(shù)
        • 2是在內(nèi)存上對已有對象的影印 所以不會調(diào)用構(gòu)造函數(shù)
        • 4是從文件中還原類的對象 也不會調(diào)用構(gòu)造函數(shù)

        何為clone()?

        1. 拷貝對象返回的是一個新的對象,而不是一個對象的引用地址;
        2. 拷貝對象已經(jīng)包含原來對象的信息,而不是對象的初始信息,即每次拷貝動作不是針對一個全新對象的創(chuàng)建。
        推薦下自己做的 Spring Boot 的實戰(zhàn)項目:
        https://github.com/YunaiV/ruoyi-vue-pro

        clone()和new那個更快?

        利用clone,在內(nèi)存中進行數(shù)據(jù)塊的拷貝,復(fù)制已有的對象,也是生成對象的一種方式。前提是類實現(xiàn)Cloneable接口,Cloneable接口沒有任何方法,是一個空接口,也可以稱這樣的接口為標志接口,只有實現(xiàn)了該接口,才會支持clone操作。有的人也許會問了,java中的對象都有一個默認的父類Object。
        Object中有一個clone方法,為什么還必須要實現(xiàn)Cloneable接口呢,這就是cloneable接口這個標志接口的意義,只有實現(xiàn)了這個接口才能實現(xiàn)復(fù)制操作,因為jvm在復(fù)制對象的時候,會檢查對象的類是否實現(xiàn)了Cloneable這個接口,如果沒有實現(xiàn),則會報CloneNotSupportedException異常。類似這樣的接口還有Serializable接口、RandomAccess接口等。
        還有值得一提的是在執(zhí)行clone操作的時候,不會調(diào)用構(gòu)造函數(shù)。還有clone操作還會面臨深拷貝和淺拷貝的問題。關(guān)于這方面的問題,網(wǎng)上有很多的相關(guān)知識了,不再累述了。由于通過復(fù)制操作得到對象不需要調(diào)用構(gòu)造函數(shù),只是內(nèi)存中的數(shù)據(jù)塊的拷貝,那是不是拷貝對象的效率是不是一定會比new的時候的快。
        答案:不是。顯然jvm的開發(fā)者也意識到通過new方式來生成對象占據(jù)了開發(fā)者生成對象的絕大部分,所以對于利用new操作生成對象進行了優(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?????????????Bean?bean?=?new?Bean("ylWang");
        ????????}
        ?
        ????????long?s2?=?System.currentTimeMillis();
        ?
        ????????Bean?bean?=?new?Bean("ylWang");
        ????????for?(int?i?=?0;?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ù)里做點簡單的事情,例如字符串截取試試。只是修改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();
        ????}
        }

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

        推薦閱讀:

        讓手機1秒打開健康碼 ,任何機型!

        SpringBoot 定時任務(wù)動態(tài)管理通用解決方案

        互聯(lián)網(wǎng)初中高級大廠面試題(9個G)

        內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper、數(shù)據(jù)結(jié)構(gòu)、限流熔斷降級......等技術(shù)棧!

        ?戳閱讀原文領(lǐng)??!? ? ? ? ? ? ? ??? ??? ? ? ? ? ? ? ? ? ?朕已閱?

        瀏覽 64
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            黄污视频免费看 | 国产日韩欧美一区二区深夜久久 | 大姑娘操B| 挺进寡妇妇紧窄湿润极品名器 | 猫咪成人网站 | 小受被攻用震蛋调教很舒服 | 国产精品秘 入口久久熟女沈阳 | 五月丁香伊人网 | 欧美日韩逼逼 | 久操福利 |