.引用拷贝
A a=new A();
A b=a;
以上是 引用拷贝 a和b 同时引用了堆内存上的new A()操作;
.对象拷贝
对对象进行拷贝,拷贝完的对象不会同时引用一个堆内存上的数据。若A是源对象 B是拷贝后的对象 则A==B操作返回fales
…浅拷贝
对象本身属性使用对象拷贝,对象引用的属性使用引用拷贝
注意:本实验存在两个对象EmailEntity 和 JSPClassEntity 对象 其中EmailEntity 引用了 JSPClassEntity 对象。
实现方式:实体对象实现Cloneable接口重写clone方法即可
public static void main(String[] args) throws Exception {
File file = new File("aac");
EmailEntity emailEntity = new EmailEntity(1,"my email","this is email",file);
JSPClassEntity entity = new JSPClassEntity();
entity.setCourseName("ui");
emailEntity.setJspClassEntity(entity);
//深拷贝:
// FileOutputStream fileOutputStream = new FileOutputStream("D:\\heiheiS");
//
// ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
//
// objectOutputStream.writeObject(emailEntity);
//
// FileInputStream fileInputStream = new FileInputStream("D:\\heiheiS");
//
// ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
//EmailEntity o = (EmailEntity)objectInputStream.readObject();
// 浅拷贝
EmailEntity o =(EmailEntity) emailEntity.clone();
emailEntity.setId(5);
entity.setCourseName("one");
System.out.println(emailEntity==o);
System.out.println(emailEntity.toString());
System.out.println(o.toString());
}
结果:
false
EmailEntity{id=5, title='my email', body='this is email', file=aac, jspClassEntity=JSPClassEntity{courseName='one', oneStudent='null', twoStudent='null', threeStudent='null'}}
EmailEntity{id=1, title='my email', body='this is email', file=aac, jspClassEntity=JSPClassEntity{courseName='one', oneStudent='null', twoStudent='null', threeStudent='null'}}
…深拷贝
对象本身属性使用对象拷贝,对象引用的属性也使用对象拷贝
实现方式:对象序列化对象(方式多种也可以用实体对象实现Cloneable接口自己重写clone方法 ,为了看出效果我直接用的序列化)
public static void main(String[] args) throws Exception {
File file = new File("aac");
EmailEntity emailEntity = new EmailEntity(1,"my email","this is email",file);
JSPClassEntity entity = new JSPClassEntity();
entity.setCourseName("ui");
emailEntity.setJspClassEntity(entity);
//深拷贝:
FileOutputStream fileOutputStream = new FileOutputStream("D:\\heiheiS");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(emailEntity);
FileInputStream fileInputStream = new FileInputStream("D:\\heiheiS");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
EmailEntity o = (EmailEntity)objectInputStream.readObject();
// 浅拷贝
//EmailEntity o =(EmailEntity) emailEntity.clone();
emailEntity.setId(5);
entity.setCourseName("one");
System.out.println(emailEntity==o);
System.out.println(emailEntity.toString());
System.out.println(o.toString());
}
结果:
false
EmailEntity{id=5, title='my email', body='this is email', file=aac, jspClassEntity=JSPClassEntity{courseName='one', oneStudent='null', twoStudent='null', threeStudent='null'}}
EmailEntity{id=1, title='my email', body='this is email', file=aac, jspClassEntity=JSPClassEntity{courseName='ui', oneStudent='null', twoStudent='null', threeStudent='null'}}