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