...
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. |
FB.CORRECTNESS.HE_USE_OF_UNHASHABLE_CLASSSignature declares use of unhashable class in hashed construct
Use of class without a hashCode() method in a hashed data structure
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 |
...
...