检查java中导致错误的条件

检查java中导致错误的条件,java,java-8,sonarqube,Java,Java 8,Sonarqube,我有下面的一段代码,在这种情况下,我得到的是声纳 检查是否相等时,应将字符串文本置于左侧。请建议如何克服这一问题 final String aviid = avcMaster.getAVMaster().getAviiId(); if ((!aviid.equals("44")) || (!aviid.equals("55"))) { // ** Sonar Issue **// final String defaultAiId = "88"; deviceElement.set

我有下面的一段代码,在这种情况下,我得到的是声纳 检查是否相等时,应将字符串文本置于左侧。请建议如何克服这一问题

final String aviid = avcMaster.getAVMaster().getAviiId();
if ((!aviid.equals("44")) || (!aviid.equals("55"))) { // ** Sonar Issue **//
    final String defaultAiId = "88";
    deviceElement.setAttribute("avi", defaultAiId);
}
else{
    deviceElement.setAttribute("avi", aviid);
}

String
变量和
String
文本之间的比较

  • 调用变量上的方法:如果变量为null,您将得到一个
    NullPointerException

    aviid.equals("44") 
    
  • 对文本调用方法:如果变量保持
    null

    "44".equals(aviid)
    
Sonar警告您,因为对于它来说,获取false比NPE更好,但代码是您的选择


另外,你的测试是错误的,因为它总是正确的,因为你不能同时得到44和55,其中一个是正确的,你的意思肯定是
&&
,你最好用另一种方法来做,你不需要否定

if ((!aviid.equals("44")) && (!aviid.equals("55"))) { 
并缩短时间(从评论中)


如果您的
avid
不为空,则
(!avid.equals(“44”))|(!avid.equals(“55”)
始终为真。另外,您要知道:如果(!avid.equals(“44”)|(!avid.equals(“55”))你能举一个例子说明它不会返回真值吗?我想你应该使用
&
而不是
|
…你可能是指
deviceElement.setAttribute(“avi”,avid.matches(“44 | 55”)?avid:“88”)
这是正确的,但是假设在
null
的情况下获取
false
而不是
NullPointerException
更好,这是值得怀疑的。@Holger我没有给出使用的意见:)我知道,Sonarqube确实…
deviceElement.setAttribute("avi", aviid.matches("44|55") ? aviid : "88");