频道栏目
首页 > 资讯 > Java > 正文

java:对象的复制(深复制和浅复制)

18-06-17        来源:[db:作者]  
收藏   我要投稿

1、浅复制表示复制目标对象本身,并不会复制目标对象的引用

2、深复制表示复制目标对象本身,并且复制目标对象的引用

3、对象复制的步骤:

3.1:实现Cloneable这个标志接口

3.2:重写Object类的clone方法,并将该方法访问修饰符改成Public

3.3:必须调用父类的clone方法,因为可以识别要复制对象的类型等 super.clone();

public class clone {
public static void main(String[] args) throws CloneNotSupportedException {
Student s1=new Student();
s1.setAge(20);
s1.setName(new Teacher());
Student s2=(Student)s1.clone();
//此行代码可以证明浅赋值 因为两个对象的地址一样
System.out.println(s1.getName()==s2.getName());

System.out.println("------------------------------------------");

Student2 s3=new Student2();
s3.setName(s1);
Student2 s4=(Student2)s3.clone();
//此行代码可以证明深赋值 因为两个对象的地址不一样
System.out.println(s4.getName()==s3.getName());
}


}
//对象的浅复制
class Student implements Cloneable{
private int age;
private Teacher tname;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Teacher getName() {
return tname;
}
public void setName(Teacher name) {
this.tname = tname;
}

@Override
public Object clone() throws CloneNotSupportedException {
Object obj=super.clone();
return obj;
}
}


class Teacher{

}
class Student2 implements Cloneable{
private int age;
private Student tname;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student getName() {
return tname;
}
public void setName(Student name) {
this.tname = name;
}

@Override
public Object clone() throws CloneNotSupportedException {
Student2 obj=(Student2)super.clone();
obj.tname=(Student)this.tname.clone();
return obj;
}
}
相关TAG标签
上一篇:linux CentOs 6.3 配置网卡的详细教程
下一篇:Android开发之Gradle解析
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站