diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/shallowdeep/Car.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/shallowdeep/Car.java new file mode 100644 index 0000000000..792f66ec5c --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/shallowdeep/Car.java @@ -0,0 +1,38 @@ +package com.baeldung.shallowdeep; + +public class Car { + + private int modelNumber; + private String modelName; + private Engine engine; + public Car(int modelNumber, Engine engine, String modelName) { + super(); + this.modelNumber = modelNumber; + this.engine = engine; + this.modelName = modelName; + } + public Car(Car car) { + this.modelNumber=car.modelNumber; + this.modelName=car.modelName; + this.engine=new Engine(car.getEngine()); + } + + public int getModelNumber() { + return modelNumber; + } + public void setModelNumber(int modelNumber) { + this.modelNumber = modelNumber; + } + public Engine getEngine() { + return engine; + } + public void setEngine(Engine engine) { + this.engine = engine; + } + public String getModelName() { + return modelName; + } + public void setModelName(String modelName) { + this.modelName = modelName; + } +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/shallowdeep/Engine.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/shallowdeep/Engine.java new file mode 100644 index 0000000000..c1e0b3c4d6 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/shallowdeep/Engine.java @@ -0,0 +1,28 @@ +package com.baeldung.shallowdeep; + +public class Engine { + private String type; + private double horsePower; + + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public double getHorsePower() { + return horsePower; + } + public void setHorsePower(double horsePower) { + this.horsePower = horsePower; + } + public Engine(String type, double horsePower) { + super(); + this.type = type; + this.horsePower = horsePower; + } + public Engine(Engine engine) { + this.type=engine.type; + this.horsePower=engine.horsePower; + } +} diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/shallowdeep/DeepShallowCopyUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/shallowdeep/DeepShallowCopyUnitTest.java new file mode 100644 index 0000000000..afbf308726 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/shallowdeep/DeepShallowCopyUnitTest.java @@ -0,0 +1,52 @@ +package com.baeldung.shallowdeep; + +import org.junit.Assert; +import org.junit.Test; + +public class DeepShallowCopyUnitTest { + + @Test + public void givenImmutable_whenShallowCopied_thenObjectsShouldBeDifferent() { + + Engine engine = new Engine("Four-stroked", 130); + Car car = new Car(123, engine, "Toyota Corolla"); + + Car shallowCopiedCar = new Car(car.getModelNumber(), car.getEngine(), car.getModelName()); + car.setModelName("Modified-Toyota Corolla"); + Assert.assertNotEquals(car.getModelName(), shallowCopiedCar.getModelName()); + + } + + @Test + public void whenShallowCopied_thenObjectsShouldBeDifferent() { + + Engine engine = new Engine("Four-stroked", 130); + Car car = new Car(123, engine, "Toyota Corolla"); + Car shallowCopiedCar = new Car(car.getModelNumber(), car.getEngine(), car.getModelName()); + engine.setType("Two-Stroked"); + Assert.assertSame(car.getEngine().getType(), shallowCopiedCar.getEngine().getType()); + + } + + @Test + public void whenShallowCopied_thenComponentObjectsShouldBeSame() { + + Engine engine = new Engine("Four-stroked", 130); + Car car = new Car(123, engine, "Toyota Corolla"); + + Car shallowCopiedCar = new Car(car.getModelNumber(), car.getEngine(), car.getModelName()); + car.getEngine().setType("Two-stroked"); + Assert.assertEquals(car.getEngine().getType(), shallowCopiedCar.getEngine().getType()); + + } + + @Test + public void givenCopyConstructor_whenDeepCopied_ObjectsShouldBeDifferent() { + Engine engine = new Engine("Four-stroked", 130); + Car car = new Car(123, engine, "Toyota Corolla"); + Car deepCopiedCar = new Car(car); + car.getEngine().setType("Two-stroked"); + Assert.assertNotEquals(car.getEngine().getType(), deepCopiedCar.getEngine().getType()); + } + +}