首页 > 解决方案 > 检查java中的条件导致错误

问题描述

我有下面的一段代码,在 if 条件下,我得到的声纳结果是字符串文字,在检查相等性时应该放在左侧。请告知如何克服这个问题。

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);
}

标签: javajava-8sonarqube

解决方案


String变量与String 文字的比较

  • 调用变量上的方法:如果变量为空,你会得到一个NullPointerException

    aviid.equals("44") 
    
  • 在文字上调用该方法:您无法获得 NPE,false如果变量持有,您将拥有null

    "44".equals(aviid)
    

Sonar 会警告您,因为对于它来说,获得 false 比 更好NPE,但代码是您的选择。


此外,您的测试是错误的,因为它总是正确的,因为您不能同时拥有 44 和 55,其中一个将是正确的,您肯定是说&&,您最好以另一种方式进行不需要否定。

if ((!aviid.equals("44")) && (!aviid.equals("55"))) { 

并且做得更短(来自评论)

deviceElement.setAttribute("avi", aviid.matches("44|55") ? aviid : "88");

推荐阅读