声纳等于避免空值违规

Sonar Equals Avoid Null Violation

修复声纳违规并收到警告“等于避免空值:
字符串文字表达式应该在等号比较的左侧。" for:

if (title != null && !title.equals("")) {
//rest of loop
}

我改成了:

if(!("").equals(title) && title != null){
//rest of loop
}

这个改变可以吗?它会解决违规问题吗?有人可以向我解释为什么原件是违规的吗?我不明白这个问题并已阅读: https://sonar43.spring.io/rules/show/checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.EqualsAvoidNullCheck?layout=false

在其他一两篇文章中,但我仍然不明白问题是什么...

警告是在告诉您不能确定 title 是否会 null。但是,根据定义,文字(例如您的空字符串)永远不能为 null。由于 equals 可以将 null 作为参数处理,因此您可以通过编写 <literal>.equals(<somebject>) 来避免潜在的 NullPointerException。如果您没有在 if 语句中使用 title,则无需进一步进行空值检查:

if(!"".equals(title)){
    //rest of loop
}

但是,由于您要检查某些内容是否 等于文字,因此让空值通过是没有意义的。

docs也有这个相关的注释:

Also, it is pretty common to see null check right before equals comparisons which is not necessary [...]