字符串文字表达式应位于等于比较的左侧

时间:2014-07-09 14:11:05

标签: java sonarqube pmd

!mapData.get("PARTY_ID").equals("")         // <-- gives SonarQube error

在上面的代码中,我得到“字符串文字表达式应该在等于比较的左侧”这个错误在Sonar中。所以我们如何避免它。

我试过了:

("").equals(!mapData.get("CON_PTY_PARTY_ID"))

但它不起作用。 提出一些建议......

3 个答案:

答案 0 :(得分:33)

其他人指出避免这种错误的方法是使用:

! ("".equals(mapData.get("CON_PTY_PARTY_ID")))

但是没有人指出为什么这很重要。文字应该在等于比较的左侧的原因是为了避免在与它进行比较的字符串为空时出现异常的可能性。

如问题中所写,如果mapData.get("CON_PTY_PARTY_ID")的值为null,则表达式将尝试调用对象的equals(..)方法存在。这会引发异常。通过将文字放在左侧,即使mapData.get("CON_PTY_PARTY_ID")的值为null,方法"".equals(...)也将被定义,并且不会抛出异常。它只会返回false

答案 1 :(得分:2)

你不应该用引号括起空白字符串。 ("").equals(!mapData.get("CON_PTY_PARTY_ID"))应为 ! ("".equals(mapData.get("CON_PTY_PARTY_ID")))

答案 2 :(得分:1)

Kevin W。的答案是正确的,但有一个错误:

你不应该用引号括起空白字符串。

  ("").equals(mapData.get("CON_PTY_PARTY_ID")) 

应该只是

  !("".equals(mapData.get("CON_PTY_PARTY_ID")))

以上是正确的。

编辑:

来源:https://jira.codehaus.org/browse/SONARJAVA-224