循环

时间:2015-12-15 11:43:07

标签: java sonarqube

我有一些看起来像这样的代码(我用通用代码替换了我的业务变量):

Map<String, String> map = new HashMap<String, String>();
for (int i = 1; i < 10; i++) {
    String suffix1 = retrieveValue1(i);
    String suffix2 = retrieveValue2(i);
    String tag = "prefix";
    if (suffix1 != null) {
      tag += suffix1;
    }
    else {
      tag += suffix2;
    }
    map.put(tag.toUpperCase(), "on");
}

我的错误是我收到了以下SonarQube违规行为:

  

性能 - 方法在循环中使用+连接字符串

在我看来这是假阳性(因为这里的字符串上没有真正的循环)但是我想先仔细检查。

我找不到与我的朋友谷歌有任何类似情况。

这是假阳性,还是我的循环中是否存在真正的性能损失?

2 个答案:

答案 0 :(得分:1)

是的,SonarQube可能对在循环中使用+=感到困惑。

在循环中创建了

String tag = "prefix";,因此for循环内没有字符串连接,从技术上讲,警告是误报。

请注意,您仍然可以使用StringBuilder附加标记的两个部分,但您必须衡量是否有必要。

答案 1 :(得分:-1)

在循环外声明String变量。我认为这可以解决你的问题。