循环中字符串连接的误报 SonarQube 违规

Sir*_*r0n 5 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");
}
Run Code Online (Sandbox Code Playgroud)

让我感到困扰的是我收到以下 SonarQube 违规:

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

在我看来,这是一个误报(因为这里的 String 没有真正的循环),但我想先仔细检查一下。

我在我的朋友 Google 上找不到任何类似的案例。

这是误报,还是我的循环中有真正的性能损失?

Tun*_*aki 2

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

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

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

  • 是的,我知道这一点 =) 但就我而言,性能仍然略有提高,所以我不介意。如果串联全部发生在同一行,我就会标记为 FP。谢谢=) (2认同)