4

可能重复:
java字符串连接

消息来源告诉我们,concat实现如下:

   public String concat(String str) {
        int otherLen = str.length();
        if (otherLen == 0) {
            return this;
        }
        int len = value.length;
        char buf[] = Arrays.copyOf(value, len + otherLen);
        str.getChars(buf, len);
        return new String(buf, true);
    }

+字符串的实现是否不同?如何?+和之间是否存在性能差异concat。什么时候应该选择一个而不是另一个?

4

1 回答 1

7

这是我刚刚做的一个测试:

我用这 3 个指令创建了一个类:

    String s1 = "foo";
    String s2 = "bar";
    String s3 = s1 + s2;

然后我获取生成的 .class 文件并使用 JAD 反编译器进行反编译。这就是代码在重新生成的源代码中的显示方式:

    String s = "foo";
    String s1 = "bar";
    String s2 = (new StringBuilder()).append(s).append(s1).toString();

所以:这就是 + 和 concat 之间的区别。

我猜 concat() 总是比 StringBuilder 好,因为它需要创建的对象更少。如果要在循环中重复追加字符串,可以选择 StringBuilder;在这种情况下, concat 可能每次都创建一个新的 String ,而 StringBuilder 可能只是扩展内部缓冲区。但是,如果 StringBuilder 在最后一个场景中是最好的,我们可以说 concat() 在循环中仍然比 +, 更好。

于 2012-12-31T01:11:59.543 回答