原理:把对象序列化成流,再从流反序列化成对象,这样就是新的对象了。
事前准备:
@Data
public class ItWorker {
private String name;
private String sex;
private LiveAddress address;
}
@Data
public class LiveAddress {
private String province;
private String city;
private String area;
}
方式一:通过json工具序列化,把对象序列化成json字符串,然后再从字符串反序列化成对象,从而实现深拷贝。
public static void main(String[] args) {
ItWorker itWorker = new ItWorker();
itWorker.setName("法外狂徒张三");
itWorker.setSex("男");
LiveAddress liveAddress = new LiveAddress();
liveAddress.setProvince("江苏");
liveAddress.setCity("苏州");
liveAddress.setArea("独墅湖");
itWorker.setAddress(liveAddress);
ItWorker deepItWorker = JSON.parseObject(JSON.toJSonString(itWorker), ItWorker.class);
deepItWorker.getAddress().setCity("南京");
System.out.println(itWorker);
System.out.println(deepItWorker);
}
输出:
ItWorker(name=法外狂徒张三, sex=男, address=LiveAddress(province=江苏, city=苏州, area=独墅湖))
ItWorker(name=法外狂徒张三, sex=男, address=LiveAddress(province=江苏, city=南京, area=独墅湖))
方式二:使用Apache Commons Lang中提供的SerializationUtils工具实现深拷贝。
前提:实现Serializable
public class ItWorker implements Serializable
public class LiveAddress implements Serializable
public static void main(String[] args) {
ItWorker itWorker = new ItWorker();
itWorker.setName("法外狂徒张三");
itWorker.setSex("男");
LiveAddress liveAddress = new LiveAddress();
liveAddress.setProvince("江苏");
liveAddress.setCity("苏州");
liveAddress.setArea("独墅湖");
itWorker.setAddress(liveAddress);
ItWorker deepClone = (ItWorker) SerializationUtils.clone(itWorker);
deepClone.getAddress().setCity("峨眉山");
System.out.println(itWorker);
System.out.println(deepClone);
}
输出:
ItWorker(name=法外狂徒张三, sex=男, address=LiveAddress(province=江苏, city=苏州, area=独墅湖))
ItWorker(name=法外狂徒张三, sex=男, address=LiveAddress(province=江苏, city=峨眉山, area=独墅湖))



