| Computing a hashcode for an array is tricky. Typically you want a hashcode that | |
| depends on the value of each element in the array, but many of the common ways | |
| to do this actually return a hashcode based on the _identity_ of the array | |
| rather than its contents. | |
| This check flags attempts to compute a hashcode from an array that do not take | |
| the contents of the array into account. There are several ways to mess this up: | |
| * Call the instance `.hashCode()` method on an array. | |
| * Call the JDK method `java.util.Objects#hashCode()` with an argument of array | |
| type. | |
| * Call the JDK method `java.util.Objects#hash()` or the Guava method | |
| `com.google.common.base.Objects#hashCode()` with multiple arguments, at | |
| least one of which is an array. | |
| * Call the JDK method `java.util.Objects#hash()` or the Guava method | |
| `com.google.common.base.Objects#hashCode()` with a single argument of | |
| _primitive_ array type. Because these are varags methods that take | |
| `Object...`, the primitive array is autoboxed into a single-element Object | |
| array, and these methods use the identity hashcode of the primitive array | |
| rather than examining its contents. Note that calling these methods on an | |
| argument of _Object_ array type actually does the right thing because no | |
| boxing is needed. | |
| Please use either `java.util.Arrays#hashCode()` (for single-dimensional arrays) | |
| or `java.util.Arrays#deepHashCode()` (for multidimensional arrays) to compute a | |
| hash value that depends on the contents of the array. If you really intended to | |
| compute the identity hash code, consider using | |
| `java.lang.System#identityHashCode()` instead for clarity. |