Java中數組的複製的問題

Java中,數組的比較有點麻煩,兩個數組使用“==”和equals有什麼不同呢?下面通過代碼來進行說明。

首先創建一個數組a,對a賦值,然後創建數組b,直接令b=a,那麼a==b的結果是否爲true呢?答案是肯定的。

如下:

public class Test01 {
	public static void main(String[] args) {
		int[] a= {1,2,3};
		int[] b = a;
		System.out.println("a==b的結果爲:"+(a == b));
	}
}

a==b的結果爲:true

爲什麼呢?這裏我們嘗試着打印一下ab的地址,也就是分別調用hashCode()方法,代碼如下:

public class Test01 {
	public static void main(String[] args) {
		int[] a= {1,2,3};
		int[] b = a;
		System.out.println("a==b的結果爲:"+(a == b));
		System.out.println("a的地址:"+a.hashCode());
		System.out.println("b的地址:"+b.hashCode());
	}
}

a==b的結果爲:true

a的地址:366712642

b的地址:366712642

---------------------------------------------------

由上可知,這裏數組的複製是深複製,即a和b指向的是同一個地址,那麼當a改變的時候b也會改變,b改變的時候a也會跟着改變,代碼測試:


public class Test01 {
	public static void main(String[] args) {
		int[] a = { 1, 2, 3 };
		int[] b = a;
		System.out.println(Arrays.toString(a));
		System.out.println(Arrays.toString(b));
		// 改變a的元素
		a[1] = 10;
		System.out.println(Arrays.toString(a));
		System.out.println(Arrays.toString(b));
		// 改變b的元素
		b[1] = 50;
		System.out.println(Arrays.toString(a));
		System.out.println(Arrays.toString(b));
	}
}

這是運行結果:

[1, 2, 3]

[1, 2, 3]

[1, 10, 3]

[1, 10, 3]

[1, 50, 3]

[1, 50, 3]

說明每一次改變都會引起對應的數組的改變




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章