Since Checkstyle 3.2
==
or
!=
.
Since ==
will compare the object references,
not the actual value of the strings,
String.equals()
should be used.
More information can be found
in this article.
Rationale: Novice Java programmers often use code like:
if (x == "something")
when they mean
if ("something".equals(x))
To configure the check:
<module name="Checker"> <module name="TreeWalker"> <module name="StringLiteralEquality"/> </module> </module>
Examples of violations:
class Example1 { String getName(){ return "Y"; } void InvalidExample(){ String status = "pending"; // violation below, 'Literal Strings should be compared using equals(), not '=='' if (status == "done") {} // violation below, 'Literal Strings should be compared using equals(), not '!='' while (status != "done") {} // violation below, 'Literal Strings should be compared using equals(), not '=='' boolean flag = (status == "done"); boolean flag1 = (status.equals("done")); String name = "X"; if (name == getName()) {} // OK, limitation that check cannot tell runtime type returned from method call } }
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding