java基礎篇--深克隆和淺克隆有什麼區別?它的實現方式有哪些?

使用克隆可以爲我們快速地構建出一個已有對象的副本,它屬於 Java 基礎的一部分,也是面試中常被問到的知識點之一。

我們本課時的面試題是,什麼是淺克隆和深克隆?如何實現克隆?

典型回答

淺克隆(Shadow Clone)是把原型對象中成員變量爲值類型的屬性都複製給克隆對象,把原型對象中成員變量爲引用類型的引用地址也複製給克隆對象,也就是原型對象中如果有成員變量爲引用對象,則此引用對象的地址是共享給原型對象和克隆對象的。

簡單來說就是淺克隆只會複製原型對象,但不會複製它所引用的對象,如下圖所示:

深克隆(Deep Clone)是將原型對象中的所有類型,無論是值類型還是引用類型,都複製一份給克隆對象,也就是說深克隆會把原型對象和原型對象所引用的對象,都複製一份給克隆對象,如下圖所示:

在 Java 語言中要實現克隆則需要實現 Cloneable 接口,並重寫 Object 類中的 clone() 方法,實現代碼如下:

public class CloneExample {
    public static void main(String[] args) throws CloneNotSupportedException {
        // 創建被賦值對象
        People p1 = new People();
        p1.setId(1);
        p1.setName("Java");
        // 克隆 p1 對象
        People p2 = (People) p1.clone();
        // 打印名稱
        System.out.println("p2:" + p2.getName());
    }
    static class People implements Cloneable {
        // 屬性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章