在Eclipse中使用相等运算符(==)进行字符串比较时突出显示

时间:2010-07-13 13:06:52

标签: java eclipse equality suppress-warnings

我有没有办法让Eclipse强调使用==运算符来测试字符串相等性?我一直误用而不是打电话给.equals()

我真的想把它变成一个警告,需要一个@SuppressWarnings注释来删除它,在尚未发生的情况下,我实际上想要比较字符串的对象相等性。

我是否可以使用任何工具来帮助在编辑时打破这种坏习惯?

3 个答案:

答案 0 :(得分:11)

使用static analysisFindBugsPMDCheckStyle工具。

每个都有Eclipse插件,以及Ant任务,Maven插件等。

其中每个都有与字符串相等相关的规则(Findbugs rulePMD ruleCheckstyle rule)。

答案 1 :(得分:5)

问题has already been given的明显答案,但这里的警告不是直接答案:如果obj为null,obj.equals也会失败。所以你经常需要使用这样的代码:

if(mystr1 != null && mystr1.equals(mystr2))

因为这个

if(mystr1.equals(mystr2))
如果mystr1为null,则

会因NullPointerException而失败。

这就是为什么,当比较字符串是已知常量时,通常使用以下语法:

if("ABCDEF".equals(mystr1))

而不是

if(mystr1.equals("ABCDEF"))

出于这个原因,许多库(如apache commons / lang)提供了组合这些检查的实用程序功能:

// this is the definition of org.apache.commons.lang.StringUtils.equals(String, String)
public static boolean equals(String str1, String str2) {
    return str1 == null ? str2 == null : str1.equals(str2);
}

// this is the definition of  org.apache.commons.lang.ObjectUtils.equals(Object, Object)
public static boolean equals(Object object1, Object object2) {
    if (object1 == object2) {
        return true;
    }
    if ((object1 == null) || (object2 == null)) {
        return false;
    }
    return object1.equals(object2);
}

使用这些方法通常比plain equals更安全,除非您确定两个对象中的一个不为null

答案 2 :(得分:1)

我不同意以前的答案 - 这是eclipse中的一个错误,你可以在这里投票:https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095

当您将字符串与==进行比较时,Eclipse可以很好地警告,因为这很少是您想要的(或者原作者想要的)。