我正在使用名为 FindBugs 的静态分析工具分析以下代码。
if(str.equals(enum.SOMEVALUE)) {// do something};
其中 str 是一个字符串,而 enum 是一个枚举。该工具为此代码生成以下警告,并声明
此方法在没有公共子类的不同类类型的两个引用上调用 equals(Object)。根据equals()的约定,不同类的对象应该总是比较为不相等;因此,根据 java.lang.Object.equals(Object) 定义的约定,这种比较的结果在运行时总是为 false。
如果我用这个替换上面的代码行:
if(str.equals(enum.SOMEVALUE.toString())) {// do something};
然后警告消失。但我不确定该工具生成的警告是否真的是真的,以及我是否以正确的方式修复它?因为我以前见过这样的比较,它似乎工作正常。