我有没有办法让Eclipse强调使用==
运算符来测试字符串相等性?我一直误用而不是打电话给.equals()
。
我真的想把它变成一个警告,需要一个@SuppressWarnings
注释来删除它,在尚未发生的情况下,我实际上想要比较字符串的对象相等性。
我是否可以使用任何工具来帮助在编辑时打破这种坏习惯?
答案 0 :(得分:11)
使用static analysis,FindBugs或PMD等CheckStyle工具。
每个都有Eclipse插件,以及Ant任务,Maven插件等。
其中每个都有与字符串相等相关的规则(Findbugs rule,PMD rule,Checkstyle 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可以很好地警告,因为这很少是您想要的(或者原作者想要的)。