比較陣列是否相等

陣列型別從 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 例項並儲存列表。