在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
爲什麼呢?這裏我們嘗試着打印一下a和b的地址,也就是分別調用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]
說明每一次改變都會引起對應的數組的改變