Sonarqube说"字符串文字表达式应该在等于比较的左侧"对于非String类型

时间:2015-12-16 12:43:08

标签: java sonarqube

我使用Sonarqube来分析我的Java代码,并且我收到了一些消息问题:

  

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

这很容易用字符串解决,翻转顺序以避免可能的NullPointerException s

//From this:
myString.equals("otherString");

//To this:
"otherString".equals(myString);

但是,我对非String类型有这些问题,例如在以下代码中:

if (myObject.getIntegerAttribute.equals(1)){ // <-Sonarqube shows the issue here
    // ...
}

因为我无法翻转&#34; 1&#34;因为它是一种原始类型,并且没有equals()方法,我该如何解决这些问题呢?

2 个答案:

答案 0 :(得分:2)

您可以通过明确地将int装入Integer来解决问题:

if (Integer.valueOf(1).equals(myObject.getIntegerAttribute)) { // <-- explicit box
    // ...
}

通过返回myObject.getIntegerAttribute,这将正确处理nullfalse的情况。

请注意,这不会产生任何开销:将Integer value = 1声明为Integer value = Integer.valueOf(1)。另请注意,由于此值(1)已缓存,因此实​​际上不会创建新的Integer对象。

答案 1 :(得分:1)

Integer test = 1;
if ( test.equals(myObject.getIntegerAttribute())

应该有助于解决您的问题。然后再说一次:真的值得存储局部变量吗?

if ( Integer.valueOf(1).equals(myObject.getIntegerAttribute())

可能是一种改进。

由于您可以自行配置声纳规则,因此根据您的配置很难说哪一个最佳。