java 怎么深拷贝一个对象_Java对象的 深拷贝和浅拷贝

1、 浅拷贝

被拷贝的对象的所有变量都含有与原来的对象相同的值,而所有对其他对象的引用仍然指向原来的对象,就是说:浅拷贝仅仅拷贝所考虑的对象而不拷贝它所引用的对象

2、 深拷贝

被拷贝的对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被拷贝过的新对象,而不再是原有的那些被引用的对象。换言之,深拷贝把要拷贝的对象所引用的对象都拷贝了一遍。

3、 浅拷贝和深拷贝区别

class A {

public int i;

public int j;

}

A a = new A();

浅拷贝:

A a1 = a;

深拷贝:

A a1 = new A();

a1.i = a.i;

a1.j = a.j;

4、 Java中对象的克隆

1>为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。

2>在派生类中覆盖基类的clone()方法,并声明为public。

3>在派生类的clone()方法中,调用super.clone()。

4>在派生类中实现Cloneable接口。

5、 例子

实体类Test

public class Test implements Cloneable{

private String name;

private String sex;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public Object clone(){

Object o=null;

try {

o=(Test)super.clone();

} catch (CloneNotSupportedException e){

e.printStackTrace();

}

return o;

}

}

(浅拷贝) 测试类Test2

public class Test2 {

public static void main(String[] s){

Testt1=new Test();

t1.setName("t1");

t1.setSex("男");

//浅拷贝

Testt2=t1;

t2.setName("t2");

t2.setSex("女");

System.out.println("t1.name= "+t1.getName());

System.out.println("t1.sex= "+t1.getSex());

System.out.println("t2.name= "+t2.getName());

System.out.println("t2.sex= "+t2.getSex());

}

}

输出结果:

t1.name= t2

t1.sex= 女

t2.name= t2

t2.sex= 女

(深拷贝)测试类Test3

public class Test3 {

public static void main(String[] s){

Testt1=new Test();

t1.setName("t1");

t1.setSex("男");

//深拷贝

Testt2=(Test) t1.clone();

t2.setName("t2");

t2.setSex("女");

System.out.println("t1.name= "+t1.getName());

System.out.println("t1.sex= "+t1.getSex());

System.out.println("t2.name= "+t2.getName());

System.out.println("t2.sex= "+t2.getSex());

}

}

输出结果:

t1.name= t1

t1.sex= 男

t2.name= t2

t2.sex= 女

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值