我有一些看起来像这样的代码(我用通用代码替换了我的业务变量):
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违规行为:
性能 - 方法在循环中使用+连接字符串
在我看来这是假阳性(因为这里的字符串上没有真正的循环)但是我想先仔细检查。
我找不到与我的朋友谷歌有任何类似情况。
这是假阳性,还是我的循环中是否存在真正的性能损失?
答案 0 :(得分:1)
是的,SonarQube可能对在循环中使用+=
感到困惑。
String tag = "prefix";
,因此for
循环内没有字符串连接,从技术上讲,警告是误报。
请注意,您仍然可以使用StringBuilder
附加标记的两个部分,但您必须衡量是否有必要。
答案 1 :(得分:-1)
在循环外声明String变量。我认为这可以解决你的问题。