From 2315b0cb7983ad2c4aa79eb88839c916055a728e Mon Sep 17 00:00:00 2001 From: Imran Alam Date: Tue, 16 Jan 2024 21:02:52 +0530 Subject: [PATCH] Created files for deep and shallow copy in java --- .../baeldung/objectcopy/DeepCopyPerson.java | 23 +++++++++++++++++++ .../objectcopy/ShallowCopyPerson.java | 10 ++++++++ .../objectcopy/DeepCopyPersonUnitTest.java | 19 +++++++++++++++ .../objectcopy/ShallowCopyPersonUnitTest.java | 17 ++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/DeepCopyPerson.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/ShallowCopyPerson.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/DeepCopyPersonUnitTest.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/ShallowCopyPersonUnitTest.java diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/DeepCopyPerson.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/DeepCopyPerson.java new file mode 100644 index 0000000000..4435a2720d --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/DeepCopyPerson.java @@ -0,0 +1,23 @@ +package com.baeldung.objectcopy; + +import java.io.*; + +class DeepCopyPerson implements Serializable { + + int age; + + public DeepCopyPerson(int age) { + this.age = age; + } + + public static DeepCopyPerson deepCopy(DeepCopyPerson person) throws IOException, ClassNotFoundException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(bos); + out.writeObject(person); + + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + ObjectInputStream in = new ObjectInputStream(bis); + + return (DeepCopyPerson) in.readObject(); + } +} diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/ShallowCopyPerson.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/ShallowCopyPerson.java new file mode 100644 index 0000000000..df06bfa988 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/ShallowCopyPerson.java @@ -0,0 +1,10 @@ +package com.baeldung.objectcopy; + +class ShallowCopyPerson { + + int age; + + public ShallowCopyPerson(int age) { + this.age = age; + } +} diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/DeepCopyPersonUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/DeepCopyPersonUnitTest.java new file mode 100644 index 0000000000..ae3a109c15 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/DeepCopyPersonUnitTest.java @@ -0,0 +1,19 @@ +package com.baeldung.objectcopy; + +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class DeepCopyPersonUnitTest { + + @Test + public void givenPerson_whenDeepCopy_thenIndependentCopy() throws IOException, ClassNotFoundException { + DeepCopyPerson person1 = new DeepCopyPerson(30); + DeepCopyPerson person2 = DeepCopyPerson.deepCopy(person1); + person1.age = 25; + + assertEquals(30, person2.age); + } +} diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/ShallowCopyPersonUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/ShallowCopyPersonUnitTest.java new file mode 100644 index 0000000000..2aea938bde --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/ShallowCopyPersonUnitTest.java @@ -0,0 +1,17 @@ +package com.baeldung.objectcopy; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ShallowCopyPersonUnitTest { + + @Test + public void givenPerson_whenShallowCopy_thenSharedReference() { + ShallowCopyPerson person1 = new ShallowCopyPerson(30); + ShallowCopyPerson person2 = person1; + person1.age = 25; + + assertEquals(25, person2.age); + } +}