...
Overriding the equals()
method without overriding the hashCode()
method can lead to unexpected results.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
MET09-J | Low | Unlikely | High | P1 | L3 |
Automated Detection
Automated detection of classes that override only one of equals()
and hashcode()
is straightforward. Sound static determination that the implementations of equals()
and hashcode()
are mutually consistent is not feasible in the general case, although heuristic techniques may be useful.
Tool | Version | Checker | Description |
---|---|---|---|
CodeSonar |
FB.CORRECTNESS.HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS
FB.CORRECTNESS.HE_USE_OF_UNHASHABLE_CLASS
Signature declares use of unhashable class in hashed construct
Use of class without a hashCode() method in a hashed data structure
| JAVA.IDEF.EQUALSNOHC | Defines equals but not hashCode (Java) | |||||||
Parasoft Jtest |
| CERT.MET09.OVERRIDE | Override 'Object.hashCode()' when you override 'Object.equals()' and vice versa | ||||||
PVS-Studio |
| V6049 | |||||||
SonarQube |
| "equals(Object obj)" and "hashCode()" should be overridden in pairs |
Related Guidelines
Bibliography
[API 2014] | |
Item 9, "Always Override |
...
...