Java - 克隆

本文详细介绍了Java中实现对象克隆的方法,包括浅克隆和深克隆的区别及其实现方式。浅克隆使得对象的引用不同,但成员变量的引用相同;而深克隆则完全复制了对象及其所有成员变量。

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

Java的克隆是通过实现Cloneable接口并重写Clone函数来实现的。

克隆有浅克隆与深克隆之分:

  • 浅克隆:原对象与克隆的对象的引用不同,但其内部成员的引用相同;
  • 深克隆:原对象与克隆的对象的引用不同,其内部成员的引用也不同。

浅克隆代码示例:

class A implements Cloneable{
	B b;
	
	A(B b){
		this.b = b;
	}
	
	@Override
	public Object clone() throws CloneNotSupportedException{
		Object object = super.clone();
		return object;
	}
}

class B{

}

public class Test{
	public static void main(String[] args) throws CloneNotSupportedException {
		B b = new B();
		A a1 = new A(b);
		A a2 = (A)a1.clone();	// 克隆的对象
		System.out.println(a1 == a2);
		System.out.println(a1.b == a2.b);
	}
}

运行结果:

false

true

 

深克隆的代码示例:

class A implements Cloneable{
	B b;
	
	A(B b){
		this.b = b;
	}
	
	@Override
	public Object clone() throws CloneNotSupportedException{
		A a = (A)super.clone();
		a.b = (B)b.clone();	// 对成员b也进行一次克隆
		return a;
	}
}

class B implements Cloneable{
	@Override
	public Object clone() throws CloneNotSupportedException{
		Object object = super.clone();
		return object;
	}	
}

public class Test{
	public static void main(String[] args) throws CloneNotSupportedException {
		B b = new B();
		A a1 = new A(b);
		A a2 = (A)a1.clone();	// 克隆的对象
		System.out.println(a1 == a2);
		System.out.println(a1.b == a2.b);
	}
}

运行结果:

false

false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值