Onward Java 5,为了连接字符串,我们可以使用'+',因为它在内部使用字符串构建器。它是正确的。 怎么样?
示例:
String a="A";
String b="C";
String a=a+b;
is same as
StringBuilder builder=new StringBuilder("A");
builder.append("B");
哪个有效?为什么? 谢谢
答案 0 :(得分: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
,仍会创建并使用StringBuilder
。这就是为什么(主要用于时间明显的大数据集),你应该避免连接,以避免像这样启动String构建器。只需从头开始使用构建器:
StringBuilder a = new StringBuilder("a");
a.append("b");
System.out.println(a);
你会节省一些执行时间和记忆。
答案 1 :(得分:0)
您可以通过在StringBuilder中设置断点然后使用stringA + stringB运行程序来轻松完成一个小实验。
当我在1.5以后尝试使用JDK时,这似乎正确地将我带到了断点。因此,我认为正确的替换是在编译期间完成的。
答案 2 :(得分:0)
在string +中将用于连接两个字符串,但它需要一些时间和空间,这与两个字符串的长度成正比。
对象StringBuilder有一种更有效的连接字符串的方法。它的工作方式类似于ArrayList,它通过分配预定义的数组来存储字符并跟踪已用空间。每次超出空间时,它都会延伸
答案 3 :(得分:-1)
这是相同的,并没有太大差异,但是当你连接两个以上的字符串时,会创建更多的StringBuilders。并且表现可能很低。