91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-12-07 11:32:00 來源:億速云 閱讀:192 作者:小新 欄目:開發技術

這篇文章主要介紹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));
    }
}

打印結果:

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

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

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

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

以上是“Java中clone( ) 和 new效率更高的是哪個”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

朝阳区| 汉源县| 丰原市| 昌乐县| 琼海市| 建瓯市| 北票市| 和静县| 云梦县| 宝坻区| 奉新县| 沙田区| 鸡西市| 道孚县| 图木舒克市| 新密市| 丁青县| 车致| 包头市| 兰考县| 石屏县| 靖边县| 泽普县| 大竹县| 波密县| 中山市| 含山县| 东宁县| 霸州市| 奉节县| 淮南市| 大港区| 湘潭县| 蛟河市| 嘉义县| 高唐县| 长治市| 永仁县| 长乐市| 岫岩| 九江市|