gpt4 book ai didi

java - 什么时候应该明确使用 StringBuilder?

转载 作者:IT老高 更新时间:2023-10-28 20:51:18 24 4
gpt4 key购买 nike

据我了解,当我执行 String baz = "foo"+ "bar"+ "123" 时,Java 编译器会在内部将表达式替换为 StringBuilder。然而,我们的 Java 老师告诉我们,始终明确地使用 StringBuilder 是一种好习惯...

我是否正确假设我将在连接内部循环时需要显式使用 StringBuilder,如 an answer to Stack Overflow question String builder vs string concatenation 中所示?在其他情况下,您应该明确使用 StringBuilder 而不是 ++=

最佳答案

它比“内部循环”更通用 - 任何时候您都想对多个语句进行连接,并且不需要将中间结果作为字符串。例如:

StringBuilder builder = new StringBuilder("Start");
if (someCondition) {
builder.append("Foo");
}
if (someOtherCondition) {
builder.append("Bar");
}
builder.append("End");
String result = builder.toString();

虽然你可以写成:

String result = "Start" + (someCondition ? "Foo" : "")
+ (someOtherCondition ? "Bar" : "") + "End";

...这变得难以阅读。而如果 if 正文中还有更多的语句,它甚至可能不可行。

要更正您的问题中的某些内容:

As I understand it, when I do String baz = "foo" + "bar" + "123" the java compiler internally replaces the expression with a StringBuilder.

不,当您编写该表达式时,编译器会识别出它是一个编译时常量,并将其替换为

String baz = "foobar123";

这是一个很好的理由显式使用 StringBuilder - 上面的代码在执行时显然比

更有效率
String baz = new StringBuilder("foo").append("bar").append("123").toString();

当它不是一个编译时常量时,Java 编译器将使用 StringBuilder 执行连接,通常给你留下比你更容易理解的代码显式使用 StringBuilder,但不会影响性能。我怀疑您的老师要么没有正确理解字符串连接,要么只是在其他地方阅读了您应该使用 StringBuilder 而没有完全理解何时它是合适的。

关于java - 什么时候应该明确使用 StringBuilder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com