1.预定义非集合类型--拷贝构造函数
public class TestA {
public static void main(String[] args) {
Integer a = 1;
Integer b = new Integer(a);
b = 2;
if (!a.equals(b)) {
System.out.println("deep copy");
}
String m = "ok";
String n = new String(m);
n = "no";
if (!m.equals(n)) {
System.out.println("deep copy");
}
}
}
结果:都是deep copy
结论:预定义非集合类型,如果支持拷贝构造函数的类型,则是深拷贝
2. 预定义集合类型--拷贝构造函数--元素为预定义集合类型
import java.util.ArrayList;
public class TestA {
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
list1.add("yangzhou");
ArrayList list2 = new ArrayList(list1);
list1.clear();
if (list2.isEmpty()) {
System.out.println("shallow copy");
} else {
System.out.println("deep copy");
}
}
}
结果:deep copy
结论:预定义集合类型拷贝构造函数,会逐个调用每个元素的operator=方法,当元素为预定义非集合类型时则为深拷贝
本文通过代码示例深入探讨了Java中深拷贝与浅拷贝的区别,重点分析了预定义非集合类型和集合类型的拷贝构造函数如何影响对象复制过程。对于非集合类型,支持拷贝构造函数时通常表现为深拷贝;而对于集合类型,即使使用拷贝构造函数,也会因内部元素引用导致浅拷贝行为。
4281

被折叠的 条评论
为什么被折叠?



