代码之家  ›  专栏  ›  技术社区  ›  Tom Tresansky

当相等运算符(==)用于Eclipse中的字符串比较时突出显示

  •  10
  • Tom Tresansky  · 技术社区  · 16 年前

    有什么方法可以让Eclipse突出使用 == 用于测试字符串相等性的运算符?我一直在用它而不是打电话 .equals() .

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

    有什么工具可以帮助我在编辑时打破这个坏习惯吗?

    3 回复  |  直到 12 年前
        1
  •  11
  •   matt b    16 年前

    使用A static analysis 工具如 FindBugs , PMD CheckStyle .

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

    每一个都有关于字符串相等的规则( Findbugs rule , PMD rule , Checkstyle rule )

        2
  •  5
  •   Community Mohan Dere    9 年前

    这个问题显而易见的答案 has already been given 但这里有一个警告,不是直接的答案: obj.equals 如果obj为空,也可能失败。因此,您经常需要使用这样的代码:

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

    因为这个

    if(mystr1.equals(mystr2))
    

    如果mystr1为空,则将失败,并返回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);
    }
    

    使用这些方法通常比普通的equals安全,除非您确定这两个对象中的一个不是空的。

        3
  •  1
  •   Mr_and_Mrs_D    12 年前

    我不同意之前的回答-这是Eclipse中的一个bug,您可以在这里投票: https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095 .

    日食可以很好地 警告 当你将字符串与 == 因为这很少是你想要的(或原作者想要的)。