Products
GG网络技术分享 2025-11-16 17:15 1
啊,Java对象拷贝,就是复制一个Java对象,让它变成另一个新鲜的对象。就像我们细小朋友分糖果一样,一份变成两份,但是两个糖果盒里的糖果是一样的。

拷贝的时候, 我们要考虑拷贝后的对象是不是还Neng正常干活,就像糖果是不是还甜一样。
还有拷贝的类型,这玩意儿hen关键,就像糖果是结实糖还是柔软糖。
深厚拷贝:这玩意儿就像把糖果放在一个新鲜的盒子里 盒子里面的糖果是和原来的糖果一模一样的,但是它们是彻头彻尾分开的。
manualClone1:manualClone2:
从输出后来啊Nengkan出, 手动拷贝就像我们自己动手分糖果一样,比比kan麻烦,而且轻巧松出现错误。
Ru果拷贝的对象存在循环引用, 拷贝时会产生死循环,这玩意儿就像我们分糖果的时候不细小心把一个糖果分成了hen许多细小块,然后又把这些个细小块拼在一起,这样就乱了套了。
autoClone1:autoClone2:
从输出后来啊Nengkan出, 自动拷贝就像有个机器帮我们分糖果,Neng少许些手动编写代码的干活量。
浅薄拷贝:这玩意儿就像只拷贝了糖果的表面和盒子,盒子里面还是原来的糖果。
浅薄拷贝只拷贝对象的基本数据类型, 比如int、float,还有对象类型,只是拷贝对象的引用地址。
拷贝的方式有两种,一种是手动拷贝,另一种是自动拷贝。
拷贝后的对象是不是还Neng正常干活,这玩意儿就像拷贝的糖果是不是还Neng吃一样。
public class ShallowCopy implements Cloneable {
private String name;
private DeepCopy deepCopy;
//省略get和set方法
@Override
public ShallowCopy clone throws CloneNotSupportedException {
return super.clone;
}
}
public class DeepCopy implements Cloneable {
private String value;
//省略get和set方法
@Override
public DeepCopy clone throws CloneNotSupportedException {
return super.clone;
}
}
public static void main throws CloneNotSupportedException {
ShallowCopy shallowCopy1 = new ShallowCopy;
shallowCopy1.setName;
DeepCopy deepCopy1 = new DeepCopy;
deepCopy1.setValue;
shallowCopy1.setDeepCopy;
ShallowCopy shallowCopy2 = shallowCopy1.clone;
System.out.println);
System.out.println);
}
输出后来啊如下:
shallowCopy1:shallowCopy2:
Java对象拷贝就像糖果分装的文艺, 我们需要掌握优良技巧,才Neng让拷贝的对象既甜又漂亮。
拷贝的时候要注意拷贝的类型, 拷贝的方式,还有拷贝后对象是不是Neng正常干活,这些个dou是hen关键的。
Ru果拷贝的对象的成员变量中包含线程、 锁等非线程平安对象,我们需要考虑怎么处理,就像糖果分装的时候要注意不要把糖果弄碎了。
public class AutoClone implements Cloneable {
private String name;
private DeepCopy deepCopy;
//省略get和set方法
@Override
public AutoClone clone throws CloneNotSupportedException {
AutoClone autoClone = super.clone; //浅薄拷贝
Field fields = this.getClass.getDeclaredFields; //获取全部的成员变量
try {
for {
field.setAccessible; //取消访问权限检查
Object fieldObj = field.get; //获取成员变量的值
if { //判断是不是需要拷贝
field.set fieldObj).clone); //递归拷贝
} else {
field.set;
}
}
} catch {
e.printStackTrace;
}
return autoClone;
}
}
public static void main throws CloneNotSupportedException {
AutoClone autoClone1 = new AutoClone;
autoClone1.setName;
DeepCopy deepCopy1 = new DeepCopy;
deepCopy1.setValue;
autoClone1.setDeepCopy;
AutoClone autoClone2 = autoClone1.clone;
System.out.println);
System.out.println);
System.out.println.hashCode + " " + autoClone2.getDeepCopy.hashCode);
}
autoClone1:deepCopy1:
从输出后来啊Nengkan出, 深厚拷贝就像完整的糖果复制,两个对象是独立的,修改一个对象的成员变量值不会关系到到另一个对象的值。
Ru果拷贝的对象存在深厚度递归引用,觉得Neng用深厚拷贝,否则拷贝后来啊兴许不符合预期。
public class DeepCopy implements Cloneable {
private String value;
//省略get和set方法
@Override
public DeepCopy clone throws CloneNotSupportedException {
DeepCopy deepCopy = super.clone; //浅薄拷贝
deepCopy.setValue); //拷贝String类型
return deepCopy;
}
}
public static void main throws CloneNotSupportedException {
DeepCopy deepCopy1 = new DeepCopy;
deepCopy1.setValue;
DeepCopy deepCopy2 = deepCopy1.clone;
System.out.println);
System.out.println);
}
deepCopy1:deepCopy2:
public class ManualClone implements Cloneable {
private String name;
private DeepCopy deepCopy;
//省略get和set方法
@Override
public ManualClone clone throws CloneNotSupportedException {
ManualClone manualClone = super.clone; //浅薄拷贝
DeepCopy deepCopyClone = deepCopy.clone; //递归拷贝DeepCopy对象
manualClone.setDeepCopy; //手动设置对象引用
return manualClone;
}
}
public static void main throws CloneNotSupportedException {
ManualClone manualClone1 = new ManualClone;
manualClone1.setName;
DeepCopy deepCopy1 = new DeepCopy;
deepCopy1.setValue;
manualClone1.setDeepCopy;
ManualClone manualClone2 = manualClone1.clone;
System.out.println);
System.out.println);
System.out.println.hashCode + " " + manualClone2.getDeepCopy.hashCode);
}
manualClone1:manualClone2:
优良了 今天我们就聊到这里希望巨大家dou学会了怎么分装糖果,也就是怎么进行Java对象拷贝。下次我们再聊其他的编程技巧。
Demand feedback