Heim  >  Artikel  >  Java  >  So verwenden Sie Java Shallow Copy

So verwenden Sie Java Shallow Copy

PHPz
PHPznach vorne
2023-05-02 15:01:061573Durchsuche

1. Konzept

#Das neue Objekt hat keine Beziehung zum ursprünglichen Objekt selbst und das ursprüngliche Objekt Nicht gleich, aber die Eigenschaften des neuen Objekts sind die gleichen wie die des alten Objekts

. Im Einzelnen können Sie die folgenden Unterschiede erkennen: (1) Wenn das Attribut ein Basistyp ist (int, double, long, boolean usw.), wird der Wert des Basistyps kopiert; 🎜🎜#

(2) Wenn das Attribut ein Referenztyp ist, wird die Speicheradresse kopiert (dh die Referenz wird kopiert, aber das referenzierte Objekt wird nicht kopiert). Wenn also eines der Objekte die Adresse ändert, es wirkt sich auf das andere Objekt aus.

2. Prinzip

Wenn die Mitgliedsvariable des Prototypobjekts ein Werttyp ist, wird eine Kopie in das geklonte Objekt kopiert. Das heißt, im Heap gibt es einen unabhängigen Raum. Wenn die Mitgliedsvariablen des Prototypobjekts Referenztypen sind, wird die Adresse des Referenzobjekts in das Klonobjekt kopiert, was bedeutet, dass die Mitgliedsvariablen des Prototypobjekts und des Das Klonobjekt zeigt auf dieselbe Speicheradresse. Mit anderen Worten: Beim flachen Klonen werden beim Kopieren eines Objekts nur es selbst und die Mitgliedsvariablen des darin enthaltenen Werttyps kopiert, während die Mitgliedsobjekte des Referenztyps nicht kopiert werden.

3. Anwendungsbeispiel

Implementieren Sie die Klonbare Schnittstelle für die Klasse, die kopiert werden muss, und schreiben Sie ihren Klon neu() #🎜🎜 #Methode

class Father{
    String name;
    public Father(String name) {
        this.name=name;
    }
    @Override
    public String toString() {
        return "Father{" +
                "name='" + name + '\'' +
                '}';
    }
}
class Son implements Cloneable {
    int age;
    String name;
    Father father;
    public Son(String name,int age) {
        this.age=age;
        this.name = name;
    }
    public Son(String name,int age, Father father) {
        this.age=age;
        this.name = name;
        this.father = father;
    }
    @Override
    public String toString() {
        return "Son{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", father=" + father +
                '}';
    }
    @Override
    protected Son clone() throws CloneNotSupportedException {
        return (Son) super.clone();
    }
}
public class test {
    public static void main(String[] args) throws CloneNotSupportedException {
        Father f=new Father("bigFather");
        Son s1 = new Son("son1",13);
        s1.father=f;
        Son s2 = s1.clone();
        
        System.out.println(s1);
        System.out.println(s2);
        System.out.println("s1==s2:"+(s1 == s2));//不相等
        System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//相等
        System.out.println();
 
        //但是他们的Father father 和String name的引用一样
        s1.age=12;
        s1.father.name="smallFather";//s1.father引用未变
        s1.name="son222";//类似 s1.name=new String("son222") 引用发生变化
        System.out.println("s1.Father==s2.Father:"+(s1.father == s2.father));//相等
        System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//不相等
        System.out.println(s1);
        System.out.println(s2);
    }
}

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Java Shallow Copy. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen