我知道StrinbBuilder很适合用于连接两个字符串对象。我想知道这样做时发生了什么:
"a" + i + "b";
哪个选项最快最安全:
1
int i = 0;
String a = "a" + i + "b";
2
int i = 0;
String a = "a".concat(String.valueOf(i)).concat("b");
3
int i = 0;
String a = String.format("a%db", i);
答案 0 :(得分:0)
它们都不是字符串连接的最佳选择。请使用StringBuilder,但要正确使用它,而不是每次都丢弃它:
StringBuilder a = new StringBuilder("a");
for(int i = 0;i<10;i++){
a.append("b");
}
这将执行此操作,而不是每次都创建新的String对象。
答案 1 :(得分:0)
他们中没有一个真的很好 - 你还在创建一个StringBuilder
并在之后丢弃它。以下是另外两个选项:
明确创建StringBuilder
并循环。
StringBuilder builder = new StringBuilder("a");
for(int i = 0; i < 10; i++) {
a.append("b");
}
String a = builder.toString();
使用Guava的Strings.repeat()
方法,并将结果连接到StringBuilder
。
String a = new StringBuilder("a").append(Strings.repeat("b", 9).toString();
就性能而言,确实没有太多改进 - 在某种程度上你正在创建 n 字符串。我们唯一可以实际改进的是内存开销。
答案 2 :(得分:0)
因为字符串在java中是不可变的,所以每次执行产生新字符串对象的字符串操作时,如果要考虑内存,则不能使用字符串连接和“+”符号,因为它会创建多个字符串对象并清理不能保证,因为当垃圾收集器运行时你不知道,你还应该考虑操作应该是线程安全的,所以在使用stringbuffer和stringbuilder时要小心