...
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 | ||||||
Parasoft Jtest |
| CODSTA.OIM.OVERRIDE | Implemented | ||||||
SonarQube |
|
"equals(Object obj)" and "hashCode()" should be overridden in pairs |
Related Guidelines
Bibliography
[API 2014] | |
Item 9, "Always Override |
...
...