Der Unterschied zwischen flacher Kopie und tiefer Kopie: Flache Kopie: Erstellen Sie ein Objekt, das auf dieselben Daten verweist. Eine Änderung der Kopie wirkt sich auch auf das Originalobjekt aus. Tiefe Kopie: Erstellen Sie ein Objekt, das eine Kopie der Daten des Originalobjekts enthält. Das Ändern der Kopie hat keine Auswirkungen auf das Originalobjekt.
Shallow Copy und Deep Copy in Java
Einführung
In Java ist das Verständnis der Konzepte von Shallow Copy und Deep Copy für Objektoperationen von entscheidender Bedeutung. In diesem Tutorial werden die Unterschiede zwischen den beiden detailliert beschrieben und anhand von Codebeispielen veranschaulicht.
Flache Kopie
Codebeispiel:
class Person { private String name; private Address address; } public class ShallowCopyDemo { public static void main(String[] args) { Person p1 = new Person(); p1.setName("John Doe"); Address addr = new Address(); addr.setStreet("123 Main St."); p1.setAddress(addr); // Shallow copy Person p2 = p1; // 更改 p2 的地址 p2.getAddress().setStreet("456 Elm St."); // p1 的地址也发生了变化 System.out.println(p1.getAddress().getStreet()); // 输出:456 Elm St. } }
In diesem Beispiel ist p2
eine flache Kopie von p1
und sie verweisen auf dasselbe Address
-Objekt . Daher wirken sich Änderungen an der Adresse von p2
auch auf p1
aus. p2
是 p1
的浅拷贝,它们引用相同的 Address
对象。因此,对 p2
的地址进行更改也会影响 p1
。
深拷贝
代码示例:
使用 clone()
方法或第三方库(如 Apache Commons Lang)来实现深拷贝。
使用 clone() 方法:
class Person implements Cloneable { private String name; private Address address; @Override public Person clone() { try { // 使用 super.clone() 创建新对象 return (Person) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } } public class DeepCopyDemo { public static void main(String[] args) { Person p1 = new Person(); p1.setName("John Doe"); Address addr = new Address(); addr.setStreet("123 Main St."); p1.setAddress(addr); // Deep copy Person p2 = p1.clone(); // 更改 p2 的地址 p2.getAddress().setStreet("456 Elm St."); // p1 的地址保持不变 System.out.println(p1.getAddress().getStreet()); // 输出:123 Main St. } }
在此示例中,clone()
方法为 p1
创建了一个深拷贝。更改 p2
的地址不会影响 p1
,因为它们引用不同的 Address
Deep Copy
Codebeispiel:
🎜🎜Verwenden Sie die Methodeclone()
oder eine Bibliothek eines Drittanbieters (z. B. Apache Commons Lang), um Deep Copy zu implementieren. 🎜🎜🎜Verwendung der clone()-Methode: 🎜🎜rrreee🎜In diesem Beispiel erstellt die clone()
-Methode eine tiefe Kopie von p1
. Das Ändern der Adresse von p2
hat keine Auswirkungen auf p1
, da diese sich auf verschiedene Address
-Objekte beziehen. 🎜🎜🎜Wann sollte man Deep Copy oder Shallow Copy verwenden? 🎜🎜🎜🎜🎜Flache Kopie: 🎜Eine flache Kopie kann durchgeführt werden, wenn beim Ändern der Kopie des Objekts keine Nebenwirkungen auftreten. 🎜🎜🎜Deep Copy: 🎜Eine Deep Copy ist erforderlich, wenn eine Kopie eines Objekts geändert wird, die sich auf das Originalobjekt auswirken kann. 🎜🎜🎜Verwenden Sie beispielsweise immer tiefe Kopien, wenn Sie Objekte zwischenspeichern oder an nicht vertrauenswürdigen Code übergeben. 🎜Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen flachem Kopieren und tiefem Kopieren in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!