2010-07-13 10 views

回答

10

使用static analysis工具,如FindBugs,PMDCheckStyle

有每個Eclipse插件,用Ant任務,Maven插件一起等

每一個都有關於字符串相等(Findbugs rulePMD ruleCheckstyle rule)規則。

+1

我肯定會第二次使用Findbugs for Eclipse ....一直是抓住這些小編碼問題的天賜之物! – mikera 2010-07-13 13:43:54

+1

所有這些都很棒,特別是當像哈德森這樣的持續集成服務器上一起使用時(假設人們實際上看結果:-)) – 2010-07-13 14:14:37

+1

你知道他們中的任何一個是否在編輯時運行?我們已經將其中的一些作爲每晚構建的一部分,並生成報告文件。我想要的東西,當我輸入錯誤/警告突出顯示正確。 – 2010-07-13 15:58:46

5

has already been given這個問題的答案很明顯,但這裏的警告不是直接回答:如果obj爲null,則obj.equals也會失敗。所以你會經常不得不使用這樣的代碼:

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

因爲如果mystr1爲null,這

if(mystr1.equals(mystr2)) 

會失敗,一個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); 
} 

使用這些方法通常比普通平等更安全,除非您確定兩個對象中的一個不爲空

1

我不同意以前的答案 - 這是eclipse中的錯誤,您可以在此投票:https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095

Eclipse可以很好地警告當你比較字符串與==,因爲這很少你想要什麼(或什麼原作者想要的)。

相關問題