Deep & Shallow Copy

This commit is contained in:
2406ankita
2022-12-11 13:03:23 +05:30
parent b50d3312a9
commit 62f75b002a
3 changed files with 118 additions and 0 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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());
}
}