Java的深拷贝和浅拷贝--等号赋值(一)
程序员文章站
2022-07-06 09:14:20
...
Java中常用的拷贝操作有三个,operator = 、拷贝构造函数 和 clone()方法。
不同的类型在拷贝过程中的表现:
(一)预定义非集合类型等号(=)赋值
private void testEqualOperator() { int x = 1; int y = x; y = 2; if (x != y) { System.out.println("deep copy"); } Integer a = 1; Integer b = a; b = 2; if (!a.equals(b)) { System.out.println("deep copy"); } String m = "ok"; String n = m; n = "no"; if (!m.equals(n)) { System.out.println("deep copy"); } }
结果:都是deep copy
结论:预定义非集合类型等号(=)赋值 -- 深拷贝
2.预定义集合类型等号(=)赋值
private void testEqualOperator() { List<String> listStringsA = new ArrayList<String>(); listStringsA.add("a"); listStringsA.add("b"); List<String> listStringsB = listStringsA; listStringsB.add("c"); for (String str : listStringsA) { System.out.println(str); } }
结果:
a b c
结论:预定义集合类型等号(=)赋值--“浅拷贝”
3. 自定义类型等号赋值
class Person { 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; } } public class AboutCopy { private void testEqualOperator() { Person a = new Person(); a.setName("NameA"); a.setAge(10); Person b = a; b.setAge(15); System.out.println(a.getAge()); } /** * @param args */ public static void main(String[] args) { AboutCopy testObj = new AboutCopy(); testObj.testEqualOperator(); } }
结果:15
结论: 自定义类型等号赋值 -- 浅拷贝
上一篇: 浅谈java深浅拷贝