Каждый раз, когда вы делаете string+=string
, он вызывает метод, подобный этому:
private String(String s1, String s2) {
if (s1 == null) {
s1 = "null";
}
if (s2 == null) {
s2 = "null";
}
count = s1.count + s2.count;
value = new char[count];
offset = 0;
System.arraycopy(s1.value, s1.offset, value, 0, s1.count);
System.arraycopy(s2.value, s2.offset, value, s1.count, s2.count);
}
В случае StringBuilder, он приходит к:
final void append0(String string) {
if (string == null) {
appendNull();
return;
}
int adding = string.length();
int newSize = count + adding;
if (newSize > value.length) {
enlargeBuffer(newSize);
}
string.getChars(0, adding, value, count);
count = newSize;
}
Как вы можете ясно заключить,string + string
создает много накладных расходов, и, по моему мнению, следует избегать, если это возможно.Если вы думаете, что использование StringBuilder является громоздким или длинным, вы можете просто создать метод и использовать его косвенно, например:
public static String scat(String... vargs) {
StringBuilder sb = new StringBuilder();
for (String str : vargs)
sb.append(str);
return sb.toString();
}
И использовать его как:
String abcd = scat("a","b","c","d");
В C # I 'м сказал примерно так же, как string.Concat();
.В вашем случае было бы разумно написать перегрузку для scat, например:
public static String scat(Collection<?> vargs) {
StringBuilder sb = new StringBuilder();
for (Object str : vargs)
sb.append(str);
return sb.toString();
}
Затем вы можете вызвать ее с помощью:
result = scat(myList)