0

从 Java 5 开始,我们可以使用 '+' 来连接字符串,因为它在内部使用了字符串生成器。对吗?如何?

例子:

    String a="A";
    String b="C";
    String a=a+b;

  is same as

    StringBuilder builder=new StringBuilder("A");
    builder.append("B");

哪个有效?为什么?谢谢

4

4 回答 4

1

两者在功能上是相同的。这意味着他们执行相同的任务。他们在幕后的运作方式完全不同。

由于将字符串+编译成字节码时会发生什么,因此与运算符的字符串连接将花费稍长的时间来处理。此处不提供字节码是编译后的串联代码等价物:

// Concatenation
String a = "a";
String b = "b";

a = a + b;

// It's equivalent once it's compiled
String a = "a";
String b = "b";

StringBuilder aBuilder = new StringBuilder(a);
aBuilder.append(b);
a = aBuilder.toString();

如您所见,即使StringBuilder连接片段中没有使用 a StringBuilder,仍然会创建和使用 a 。这就是为什么(主要是对于时间会很明显的大型数据集)您应该避免连接以避免需要像这样启动 String 构建器。只需从一开始就使用构建器:

StringBuilder a = new StringBuilder("a");
a.append("b");
System.out.println(a);

而且你会为自己节省一些执行时间和内存。

于 2013-10-04T06:29:43.860 回答
0

在字符串中 + 将用于连接两个字符串,但这将花费一些时间和空间,这与两个字符串的长度成正比。

对象 StringBuilder 有一种更有效的连接字符串的方法。它的工作方式类似于 ArrayList,通过分配预定义的数组来存储字符并跟踪使用的空间。每次超出空间时,它将扩展

于 2013-10-04T06:26:29.890 回答
0

您可以通过在 StringBuilder 中设置断点轻松地做一个小实验,然后使用 stringA + stringB 运行您的程序。

当我在 1.5 之后尝试使用 JDK 时,这似乎正确地将我带到了断点。因此,我认为正确的替换是在编译期间完成的。

于 2013-10-04T06:22:04.447 回答
-1

这是一样的,没有太大的区别,但是当你连接两个以上的字符串时,会创建更多的 StringBuilders。并且性能可能很低。

于 2013-10-04T06:23:08.023 回答