Java 深复制,浅复制

本文详细介绍了Java中对象复制的两种方式:浅复制与深复制,并通过代码实例展示了如何实现这两种复制。浅复制仅复制对象的引用,而深复制则会递归复制对象的所有属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅复制代码实例:

public class CloneTest1
{
public static void main(String[] args) throws CloneNotSupportedException
{
Student student  = new Student();

student.setAge(20);
student.setName("zhangsan");

Student student2 = (Student)student.clone();

System.out.println(student2.getAge());
System.out.println(student2.getName());
System.out.println("---------------");

student2.setName("lisi");

System.out.println(student.getName());
System.out.println(student2.getName());
}
}


class Student implements  Cloneable 
{
private int age;

private String name ;


public int getAge()
{
return age;
}


public void setAge(int age)
{
this.age = age;
}


public String getName()
{
return name;
}


public void setName(String name)
{
this.name = name;
}

@Override
public Object clone() throws CloneNotSupportedException
{
Object object = super.clone();  //浅复制

return object ;
}
}

深复制的小实例



public class CloneTest2
{
public static void main(String[] args) throws CloneNotSupportedException
{
Teacher teacher = new Teacher();

teacher.setAge(40);
teacher.setName("teacher zhang");

Student2 s1 = new Student2();

s1.setAge(20);
s1.setName("zhangsan");
s1.setTeacher(teacher);

Student2 s2 = (Student2)s1.clone();

System.out.println(s2.getName());
System.out.println(s2.getAge());

teacher.setName("teacher li");

System.out.println(s2.getTeacher().getName());
System.out.println(s2.getTeacher().getAge());

}
}


class Teacher implements Cloneable
{
private int age;

private String name;


public int getAge()
{
return age;
}


public void setAge(int age)
{
this.age = age;
}


public String getName()
{
return name;
}


public void setName(String name)
{
this.name = name;
}

@Override
public  Object clone() throws CloneNotSupportedException
{
Object object = super.clone();

return (Teacher)object;
}


}




class Student2 implements Cloneable
{
private int age;

private String name;

private Teacher teacher;


public int getAge()
{
return age;
}


public void setAge(int age)
{
this.age = age;
}


public String getName()
{
return name;
}


public void setName(String name)
{
this.name = name;
}


public Teacher getTeacher()
{
return teacher;
}


public void setTeacher(Teacher teacher)
{
this.teacher = teacher;
}


@Override
public Object clone() throws CloneNotSupportedException
{
Student2 student2 = (Student2)super.clone();

student2.setTeacher((Teacher)student2.getTeacher().clone());


return student2;
}


}



使用序列化的方式也可以实现对象的深复制





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值