连接两个字符串

时间:2013-10-26 14:45:44

标签: java string concat

我知道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);

3 个答案:

答案 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时要小心