From 2315b0cb7983ad2c4aa79eb88839c916055a728e Mon Sep 17 00:00:00 2001 From: Imran Alam Date: Tue, 16 Jan 2024 21:02:52 +0530 Subject: [PATCH 1/7] 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); + } +} From a1fb6eb66b1677541aecbc4a7f021c02b27c1b94 Mon Sep 17 00:00:00 2001 From: Imran Alam Date: Sat, 3 Feb 2024 21:43:12 +0530 Subject: [PATCH 2/7] Added code for Mutable vs Immutable objects in java --- .../baeldung/objectcopy/DeepCopyPerson.java | 23 ------------- .../objectcopy/ShallowCopyPerson.java | 10 ------ .../objectmutability/ImmutablePerson.java | 21 ++++++++++++ .../objectcopy/DeepCopyPersonUnitTest.java | 19 ----------- .../objectcopy/ShallowCopyPersonUnitTest.java | 17 ---------- .../ImmutableObjectExamplesUnitTest.java | 33 +++++++++++++++++++ .../ImmutablePersonUnitTest.java | 23 +++++++++++++ .../MutableObjectExamplesUnitTest.java | 28 ++++++++++++++++ 8 files changed, 105 insertions(+), 69 deletions(-) delete mode 100644 core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/DeepCopyPerson.java delete 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/main/java/com/baeldung/objectmutability/ImmutablePerson.java delete mode 100644 core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/DeepCopyPersonUnitTest.java delete mode 100644 core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/ShallowCopyPersonUnitTest.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java create mode 100644 core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/MutableObjectExamplesUnitTest.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 deleted file mode 100644 index 4435a2720d..0000000000 --- a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/DeepCopyPerson.java +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index df06bfa988..0000000000 --- a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectcopy/ShallowCopyPerson.java +++ /dev/null @@ -1,10 +0,0 @@ -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/main/java/com/baeldung/objectmutability/ImmutablePerson.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectmutability/ImmutablePerson.java new file mode 100644 index 0000000000..e67c802a2e --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/objectmutability/ImmutablePerson.java @@ -0,0 +1,21 @@ +package com.baeldung.objectmutability; + +public final class ImmutablePerson { + + private final String name; + private final int age; + + public ImmutablePerson(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public int getAge() { + return 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 deleted file mode 100644 index ae3a109c15..0000000000 --- a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/DeepCopyPersonUnitTest.java +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index 2aea938bde..0000000000 --- a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectcopy/ShallowCopyPersonUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -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); - } -} diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java new file mode 100644 index 0000000000..f0f22df3ea --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.objectmutability; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotSame; + +public class ImmutableObjectExamplesUnitTest { + + @Test + public void givenImmutableString_whenConcat_thenNotSameAndCorrectValues() { + String originalString = "Hello"; + String modifiedString = originalString.concat(" World"); + + assertNotSame(originalString, modifiedString); + + assertEquals("Hello", originalString); + assertEquals("Hello World", modifiedString); + } + + @Test + public void givenImmutableInteger_whenAdd_thenNotSameAndCorrectValue() { + Integer immutableInt = 42; + Integer modifiedInt = immutableInt + 8; + + assertNotSame(immutableInt, modifiedInt); + + assertEquals(42, (int) immutableInt); + assertEquals(50, (int) modifiedInt); + } +} + + diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java new file mode 100644 index 0000000000..6aeebcb242 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java @@ -0,0 +1,23 @@ +package com.baeldung.objectmutability; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ImmutablePersonUnitTest { + + @Test + public void givenImmutablePerson_whenModifyName_thenCompilationError() { + ImmutablePerson person = new ImmutablePerson("John", 30); + // person.setName("Jane"); + } + + @Test + public void givenImmutablePerson_whenAccessFields_thenCorrectValues() { + ImmutablePerson person = new ImmutablePerson("John", 30); + + assertEquals("John", person.getName()); + assertEquals(30, person.getAge()); + } +} + diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/MutableObjectExamplesUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/MutableObjectExamplesUnitTest.java new file mode 100644 index 0000000000..57e36efbf4 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/MutableObjectExamplesUnitTest.java @@ -0,0 +1,28 @@ +package com.baeldung.objectmutability; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class MutableObjectExamplesUnitTest { + + @Test + public void givenMutableString_whenModify_thenCorrectValue() { + StringBuilder mutableString = new StringBuilder("Hello"); + mutableString.append(" World"); + + assertEquals("Hello World", mutableString.toString()); + } + + @Test + public void givenMutableList_whenAddElement_thenCorrectSize() { + List mutableList = new ArrayList<>(); + mutableList.add("Java"); + + assertEquals(1, mutableList.size()); + } +} + From 34a8c4166c09e55ee61c1398c48ef23e4185f5d3 Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Mon, 5 Feb 2024 14:22:23 +0530 Subject: [PATCH 3/7] Update ImmutableObjectExamplesUnitTest.java --- .../objectmutability/ImmutableObjectExamplesUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java index f0f22df3ea..34a0874a37 100644 --- a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java @@ -8,7 +8,7 @@ import static org.junit.jupiter.api.Assertions.assertNotSame; public class ImmutableObjectExamplesUnitTest { @Test - public void givenImmutableString_whenConcat_thenNotSameAndCorrectValues() { + public void givenImmutableString_whenConcatString_thenNotSameAndCorrectValues() { String originalString = "Hello"; String modifiedString = originalString.concat(" World"); @@ -19,7 +19,7 @@ public class ImmutableObjectExamplesUnitTest { } @Test - public void givenImmutableInteger_whenAdd_thenNotSameAndCorrectValue() { + public void givenImmutableInteger_whenAddWord_thenNotSameAndCorrectValue() { Integer immutableInt = 42; Integer modifiedInt = immutableInt + 8; From b07426336fe310fa6591c76665b4887be7b38538 Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Mon, 5 Feb 2024 14:23:23 +0530 Subject: [PATCH 4/7] Update ImmutableObjectExamplesUnitTest.java --- .../objectmutability/ImmutableObjectExamplesUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java index 34a0874a37..4c41050928 100644 --- a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutableObjectExamplesUnitTest.java @@ -19,7 +19,7 @@ public class ImmutableObjectExamplesUnitTest { } @Test - public void givenImmutableInteger_whenAddWord_thenNotSameAndCorrectValue() { + public void givenImmutableInteger_whenAddInteger_thenNotSameAndCorrectValue() { Integer immutableInt = 42; Integer modifiedInt = immutableInt + 8; From 48690d61bef4fe6541b9dba19e48a8a613690677 Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Mon, 5 Feb 2024 14:24:18 +0530 Subject: [PATCH 5/7] Update ImmutablePersonUnitTest.java --- .../baeldung/objectmutability/ImmutablePersonUnitTest.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java index 6aeebcb242..c8f950fa60 100644 --- a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java @@ -6,11 +6,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class ImmutablePersonUnitTest { - @Test - public void givenImmutablePerson_whenModifyName_thenCompilationError() { - ImmutablePerson person = new ImmutablePerson("John", 30); - // person.setName("Jane"); - } @Test public void givenImmutablePerson_whenAccessFields_thenCorrectValues() { From ac3959d261f3c9b0e9e76e31bab8d7aacbca847b Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Mon, 5 Feb 2024 14:25:15 +0530 Subject: [PATCH 6/7] Update MutableObjectExamplesUnitTest.java --- .../objectmutability/MutableObjectExamplesUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/MutableObjectExamplesUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/MutableObjectExamplesUnitTest.java index 57e36efbf4..6c770d68af 100644 --- a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/MutableObjectExamplesUnitTest.java +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/MutableObjectExamplesUnitTest.java @@ -10,7 +10,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class MutableObjectExamplesUnitTest { @Test - public void givenMutableString_whenModify_thenCorrectValue() { + public void givenMutableString_whenAppendElement_thenCorrectValue() { StringBuilder mutableString = new StringBuilder("Hello"); mutableString.append(" World"); From 1732af872137b5c84319cce5977533ea53fec9f4 Mon Sep 17 00:00:00 2001 From: Imran Alam <75203259+Imranalam28@users.noreply.github.com> Date: Mon, 5 Feb 2024 15:29:01 +0530 Subject: [PATCH 7/7] Update ImmutablePersonUnitTest.java --- .../com/baeldung/objectmutability/ImmutablePersonUnitTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java index c8f950fa60..5bd6abbb4a 100644 --- a/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java +++ b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/objectmutability/ImmutablePersonUnitTest.java @@ -6,7 +6,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class ImmutablePersonUnitTest { - @Test public void givenImmutablePerson_whenAccessFields_thenCorrectValues() { ImmutablePerson person = new ImmutablePerson("John", 30);