哪一个更适合串联连接
如果我想从一串字符串变量(如str1和str2)构建一个字符串, 哪一个会更好一个???
String str="This the String1 " + str1 + " merged with Sting2 " + str2;
String str=String.format("This the String1 %s merged with Sting2 %s", str1 , str2);
我认为第二个会更好,因为第一个会受到很多字符串的影响。
如果我错了,请纠正我?并提供相同的反馈答案 0 :(得分:9)
第一个实际上不会创建任何额外的字符串。它将被编译成类似的东西:
String str = new StringBuilder("This the String1 ")
.append(str1)
.append(" merged with Sting2 ")
.append(str2)
.toString();
鉴于第二种形式需要解析格式字符串,如果第一种形式实际上运行得更快,我不会感到惊讶。
然而,除非你有基准来证明这确实是一些运行速度太慢的代码,否则你不应该太担心效率。你应该更担心可读性。您觉得哪些代码更具可读性?
答案 1 :(得分:3)
第一个不会受到字符串创建的影响。因为一切都是静态的,所以创建一个StringBuilder,附加所有部分,然后调用toString。它将比第二个更有效,后者必须解析格式字符串。但这可能不是你会失去或获得很多表现的地方。
当您在循环中执行时,字符串连接会创建大量临时对象:
for (String elem : someList) {
s += elem;
}
这将在每次迭代时创建一个StringBuilder和一个String对象。
答案 2 :(得分:1)
这取决于您连接的字符串数量。对于最多5(ish),它可能无关紧要。
如果您确实需要此优化,请衡量以适应您的特定情况。
答案 3 :(得分:0)