Since arrays do not override Object.equals()
, calling equals on two arrays is the same as comparing their addresses. This means that array1.equals(array2)
is equivalent to array1==array2
.
However, some developers might expect Array.equals(Object obj) to do more than a simple memory address comparison, comparing for instance the size and content of the two arrays. To prevent such a misunderstanding, the '==' operator or Arrays.equals(array1, array2)
must always be used in place of the Array.equals(Object obj) method.
String[] array1 = ... String[] array2 = ... ... if(array1.equals(array2)){ ... }
String[] array1 = ... String[] array2 = ... ... if(array1 == array2){ ... } //or if(Arrays.equals(array1, array2)) { ... }
Tool | Reference | Description |
---|---|---|
Findbugs | EC_INCOMPATIBLE_ARRAY_COMPARE | Correctness - equals(...) used to compare incompatible arrays |
Findbugs | EC_BAD_ARRAY_COMPARE | Correctness - Invocation of equals() on an array, which is equivalent to == |