// 原文:https://www.cnblogs.com/programmerkaixin/p/10969745.html
public class PrototypeClientTest {
public static void main(String[] args) throws CloneNotSupportedException {
Invoice invoice = new Invoice();// 电子发票
invoice.setTicketNo(1);// 票号
invoice.setColor("blue");// 发票联颜色
invoice.setCompanySeal(new Seal());// 公司印章
invoice.setEffective(false);// 是否有效
// 1.测试浅克隆
// Invoice invoiceClone = (Invoice) invoice.getShallowCloneInstance();
// 2.测试深克隆
Invoice invoiceClone = (Invoice) invoice.getDeepCloneInstance(invoice);
//
// -+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+--++-+--+-++-+-+-+-+-+-+-+-
System.out.println("1.验证int类型是否相等:");
System.out.printf("\t票号:%s\t", invoice.getTicketNo());
System.out.printf("\t克隆出来的票号:%s\t", invoiceClone.getTicketNo());
System.out.printf("\t验证int类型:%s\n", (invoice.getTicketNo() == invoiceClone.getTicketNo()));
System.out.println("2.验证String类型是否相等:");
System.out.printf("\t发票联颜色:%s\t", invoice.getColor().hashCode());
System.out.printf("\t克隆出来的发票联颜色:%s\t", invoiceClone.getColor().hashCode());
System.out.printf("\t验证String类型:%s\n", (invoiceClone.getColor().equals(invoice.getColor())));
System.out.println("3.验证引用数据类型是否相等:");
System.out.printf("\t公司印章:%s\t", invoice.getCompanySeal().hashCode());
System.out.printf("\t克隆出来的公司印章:%s\t", invoiceClone.getCompanySeal().hashCode());
System.out.printf("\t验证引用数据类型:%s\n", (invoice.getCompanySeal() == invoiceClone.getCompanySeal()));
System.out.println("4.验证boolean类型是否相等:");
System.out.printf("\t是否有效:%s\t", invoice.getEffective().hashCode());
System.out.printf("\t克隆出来的是否有效:%s\t", invoiceClone.getEffective().hashCode());
System.out.printf("\t验证boolean类型:%s\n\n", (invoice.getEffective().equals(invoiceClone.getEffective())));
// -+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+--++-+--+-++-+-+-+-+-+-+-+-
invoice.setTicketNo(2);// 票号
System.out.printf("1.修改后验证int类型:\n\t%s\n\t%s\n", invoice, invoiceClone);
invoice.setColor("green");// 发票联颜色
System.out.printf("2.修改后验证String类型:\n\t%s\n\t%s\n", invoice, invoiceClone);
invoice.getCompanySeal().setName("迷心兔");// 公司印章名称
System.out.printf("3.修改后验证引用数据类型:\n\t%s\n\t%s\n", invoice, invoiceClone);
invoice.setEffective(true);// 是否有效
System.out.printf("4.修改后验证boolean类型包装类:\n\t%s\n\t%s\n", invoice, invoiceClone);
}
}
## 浅克隆
1.验证int类型是否相等:
票号:1 克隆出来的票号:1 验证int类型:true
2.验证String类型是否相等:
发票联颜色:3027034 克隆出来的发票联颜色:3027034 验证String类型:true
3.验证引用数据类型是否相等:
公司印章:1342443276 克隆出来的公司印章:1342443276 验证引用数据类型:true
4.验证boolean类型是否相等:
是否有效:1237 克隆出来的是否有效:1237 验证boolean类型:true
1.修改后验证int类型:
电子发票: {ticketHeader=‘null‘, ticketNo=2, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
电子发票: {ticketHeader=‘null‘, ticketNo=1, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
2.修改后验证String类型:
电子发票: {ticketHeader=‘null‘, ticketNo=2, name=‘null‘, color=‘green‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
电子发票: {ticketHeader=‘null‘, ticketNo=1, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
3.修改后验证引用数据类型:
电子发票: {ticketHeader=‘null‘, ticketNo=2, name=‘null‘, color=‘green‘, company=‘null‘, companySeal=电子印章: {name=‘迷心兔‘, image=null}, supervisedSeal=null, effective=false}
电子发票: {ticketHeader=‘null‘, ticketNo=1, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘迷心兔‘, image=null}, supervisedSeal=null, effective=false}
4.修改后验证boolean类型包装类:
电子发票: {ticketHeader=‘null‘, ticketNo=2, name=‘null‘, color=‘green‘, company=‘null‘, companySeal=电子印章: {name=‘迷心兔‘, image=null}, supervisedSeal=null, effective=true}
电子发票: {ticketHeader=‘null‘, ticketNo=1, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘迷心兔‘, image=null}, supervisedSeal=null, effective=false}
## 深克隆
1.验证int类型是否相等:
票号:1 克隆出来的票号:1 验证int类型:true
2.验证String类型是否相等:
发票联颜色:3027034 克隆出来的发票联颜色:3027034 验证String类型:true
3.验证引用数据类型是否相等:
公司印章:1494279232 克隆出来的公司印章:1177096266 验证引用数据类型:false
4.验证boolean类型是否相等:
是否有效:1237 克隆出来的是否有效:1237 验证boolean类型:true
1.修改后验证int类型:
电子发票: {ticketHeader=‘null‘, ticketNo=2, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
电子发票: {ticketHeader=‘null‘, ticketNo=1, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
2.修改后验证String类型:
电子发票: {ticketHeader=‘null‘, ticketNo=2, name=‘null‘, color=‘green‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
电子发票: {ticketHeader=‘null‘, ticketNo=1, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
3.修改后验证引用数据类型:
电子发票: {ticketHeader=‘null‘, ticketNo=2, name=‘null‘, color=‘green‘, company=‘null‘, companySeal=电子印章: {name=‘迷心兔‘, image=null}, supervisedSeal=null, effective=false}
电子发票: {ticketHeader=‘null‘, ticketNo=1, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
4.修改后验证boolean类型包装类:
电子发票: {ticketHeader=‘null‘, ticketNo=2, name=‘null‘, color=‘green‘, company=‘null‘, companySeal=电子印章: {name=‘迷心兔‘, image=null}, supervisedSeal=null, effective=true}
电子发票: {ticketHeader=‘null‘, ticketNo=1, name=‘null‘, color=‘blue‘, company=‘null‘, companySeal=电子印章: {name=‘null‘, image=null}, supervisedSeal=null, effective=false}
原文:https://www.cnblogs.com/mixintu/p/12662777.html