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