从 Java 5 开始,我们可以使用 '+' 来连接字符串,因为它在内部使用了字符串生成器。对吗?如何?
例子:
String a="A";
String b="C";
String a=a+b;
is same as
StringBuilder builder=new StringBuilder("A");
builder.append("B");
哪个有效?为什么?谢谢
从 Java 5 开始,我们可以使用 '+' 来连接字符串,因为它在内部使用了字符串生成器。对吗?如何?
例子:
String a="A";
String b="C";
String a=a+b;
is same as
StringBuilder builder=new StringBuilder("A");
builder.append("B");
哪个有效?为什么?谢谢
两者在功能上是相同的。这意味着他们执行相同的任务。他们在幕后的运作方式完全不同。
由于将字符串+
编译成字节码时会发生什么,因此与运算符的字符串连接将花费稍长的时间来处理。此处不提供字节码是编译后的串联代码等价物:
// 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);
而且你会为自己节省一些执行时间和内存。
在字符串中 + 将用于连接两个字符串,但这将花费一些时间和空间,这与两个字符串的长度成正比。
对象 StringBuilder 有一种更有效的连接字符串的方法。它的工作方式类似于 ArrayList,通过分配预定义的数组来存储字符并跟踪使用的空间。每次超出空间时,它将扩展
您可以通过在 StringBuilder 中设置断点轻松地做一个小实验,然后使用 stringA + stringB 运行您的程序。
当我在 1.5 之后尝试使用 JDK 时,这似乎正确地将我带到了断点。因此,我认为正确的替换是在编译期间完成的。
这是一样的,没有太大的区别,但是当你连接两个以上的字符串时,会创建更多的 StringBuilders。并且性能可能很低。