Deep & Shallow Copy
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user