
org.sonar.l10n.java.rules.java.S4973.html Maven / Gradle / Ivy
Why is this an issue?
It’s almost always a mistake to compare two instances of java.lang.String
or boxed types like java.lang.Integer
using
reference equality ==
or !=
, because it is not comparing actual value but locations in memory.
Noncompliant code example
String firstName = getFirstName(); // String overrides equals
String lastName = getLastName();
if (firstName == lastName) { ... }; // Non-compliant; false even if the strings have the same value
Compliant solution
String firstName = getFirstName();
String lastName = getLastName();
if (firstName != null && firstName.equals(lastName)) { ... };
Resources
- CWE - CWE-595 - Comparison of Object References Instead of Object Contents
- CWE - CWE-597 - Use of Wrong Operator in String Comparison
- CERT, EXP03-J. - Do not use the equality operators when comparing values of boxed
primitives
- CERT, EXP50-J. - Do not confuse abstract object equality with reference equality
© 2015 - 2025 Weber Informatics LLC | Privacy Policy