有沒有什麼辦法讓Eclipse可以突出使用==
運算符來測試字符串是否相等?我錯誤地使用它而不是調用.equals()
。當在Eclipse中使用等號運算符(==)進行字符串比較時突出顯示
我真的想把它做成一個警告,並且需要一個@SuppressWarnings
註釋來移除它,但是在我真的想比較字符串以獲得對象相等的情況下。
在編輯時是否有任何工具可以幫助打破這種不良習慣?
有沒有什麼辦法讓Eclipse可以突出使用==
運算符來測試字符串是否相等?我錯誤地使用它而不是調用.equals()
。當在Eclipse中使用等號運算符(==)進行字符串比較時突出顯示
我真的想把它做成一個警告,並且需要一個@SuppressWarnings
註釋來移除它,但是在我真的想比較字符串以獲得對象相等的情況下。
在編輯時是否有任何工具可以幫助打破這種不良習慣?
使用static analysis工具,如FindBugs,PMD或CheckStyle。
有每個Eclipse插件,用Ant任務,Maven插件一起等
每一個都有關於字符串相等(Findbugs rule,PMD rule,Checkstyle rule)規則。
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);
}
使用這些方法通常比普通平等更安全,除非您確定兩個對象中的一個不爲空
我不同意以前的答案 - 這是eclipse中的錯誤,您可以在此投票:https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095。
Eclipse可以很好地警告當你比較字符串與==
,因爲這很少你想要什麼(或什麼原作者想要的)。
我肯定會第二次使用Findbugs for Eclipse ....一直是抓住這些小編碼問題的天賜之物! – mikera 2010-07-13 13:43:54
所有這些都很棒,特別是當像哈德森這樣的持續集成服務器上一起使用時(假設人們實際上看結果:-)) – 2010-07-13 14:14:37
你知道他們中的任何一個是否在編輯時運行?我們已經將其中的一些作爲每晚構建的一部分,並生成報告文件。我想要的東西,當我輸入錯誤/警告突出顯示正確。 – 2010-07-13 15:58:46