如何在Java中实现+?

时间:2012-12-31 01:00:13

标签: java

  

可能重复:
  java String concatenation

消息来源告诉我们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之间是否存在性能差异?何时应该选择另一个?

1 个答案:

答案 0 :(得分: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()比+更好。