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

Wol*_*789 11 java pmd sonarqube

!mapData.get("PARTY_ID").equals("")         // <-- gives SonarQube error
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我得到"字符串文字表达式应该在等于比较的左侧"这个错误在Sonar中.那么我们如何才能避免它.

我试过这个:

("").equals(!mapData.get("CON_PTY_PARTY_ID"))
Run Code Online (Sandbox Code Playgroud)

但它不起作用.给点建议......

Mar*_*uer 34

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

! ("".equals(mapData.get("CON_PTY_PARTY_ID")))
Run Code Online (Sandbox Code Playgroud)

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

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


小智 2

您不应该用引号将空白字符串引起来。("").equals(!mapData.get("CON_PTY_PARTY_ID"))应该只是 ! ("".equals(mapData.get("CON_PTY_PARTY_ID")))