比較陣列是否相等
陣列型別從 java.lang.Object 繼承了他們的 equals()
(和 hashCode()
)實現 ,因此 equals()
只會在與完全相同的陣列物件進行比較時返回 true。要根據陣列的值來比較陣列,請使用 java.util.Arrays.equals
,它會為所有陣列型別過載。
int[] a = new int[]{1, 2, 3};
int[] b = new int[]{1, 2, 3};
System.out.println(a.equals(b)); //prints "false" because a and b refer to different objects
System.out.println(Arrays.equals(a, b)); //prints "true" because the elements of a and b have the same values
當元素型別是引用型別時,Arrays.equals()
在陣列元素上呼叫 equals()
以確定相等性。特別是,如果元素型別本身是陣列型別,則將使用標識比較。要比較多維陣列的相等性,請使用 Arrays.deepEquals()
,如下所示:
int a[] = { 1, 2, 3 };
int b[] = { 1, 2, 3 };
Object[] aObject = { a }; // aObject contains one element
Object[] bObject = { b }; // bObject contains one element
System.out.println(Arrays.equals(aObject, bObject)); // false
System.out.println(Arrays.deepEquals(aObject, bObject));// true
因為集合和對映使用 equals()
和 hashCode()
,所以陣列通常不能用作集合元素或對映鍵。將它們包裝在一個幫助類中,該類根據陣列元素實現 equals()
和 hashCode()
,或者將它們轉換為 List
例項並儲存列表。