对象深拷贝与浅拷贝

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


浅拷贝: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

 

几个示例如下:

public static void main(String[] args) {
		// -------- 浅拷贝 ---------
		Student zhangsan = new Student( "Zhangsan", 20 );
		Student lisi = zhangsan;
		lisi.setName( "Lisi" );
		System.out.println( zhangsan.getName() );
		System.out.println( lisi.getName() );
		System.out.println( zhangsan );
		System.out.println( lisi );
		
		// -------- 深拷贝 ---------
		Student wangwu = new Student( "Wangwu", 34 );
		Student zhaoliu = null;
		try {
			zhaoliu = (Student) wangwu.clone();
		} catch (CloneNotSupportedException e) {
			// ignore
		}
		zhaoliu.setName( "Zhaoliu" );
		System.out.println( wangwu.getName() );
		System.out.println( zhaoliu.getName() );
		System.out.println( wangwu );
		System.out.println( zhaoliu );
		
		HashMap hm1 = new HashMap();
		hm1.put( "k", "v" );
		HashMap hm2 = new HashMap( hm1 );
		hm2.clear();
		System.out.println( hm1.size() );
		System.out.println( hm2.size() );
	}

 结果输出:

Lisi
Lisi
Student@c17164
Student@c17164
Wangwu
Zhaoliu
Student@1fb8ee3
Student@61de33
1
0
 

你可能感兴趣的:(深拷贝)