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 == |