use*_*115 21 java string stringbuilder concatenation
据我所知,当我做String baz = "foo" + "bar" + "123"Java编译器时,内部用一个替换表达式StringBuilder.然而,我们的Java老师告诉我们,总是StringBuilder明确使用明确的...
我是否正确假设我只需要在连接内部循环时显式使用StringBuilder,如Stack Overflow问题字符串生成器与字符串连接的答案中所示?是否有其他情况下,你应该明确地使用StringBuilder,而不是+或+=?
Jon*_*eet 35
它比"内部循环"更通用 - 它是您想要在多个语句上进行连接的任何时候,并且不需要将中间结果作为字符串.例如:
StringBuilder builder = new StringBuilder("Start");
if (someCondition) {
builder.append("Foo");
}
if (someOtherCondition) {
builder.append("Bar");
}
builder.append("End");
String result = builder.toString();
Run Code Online (Sandbox Code Playgroud)
虽然你可以这样写:
String result = "Start" + (someCondition ? "Foo" : "")
+ (someOtherCondition ? "Bar" : "") + "End";
Run Code Online (Sandbox Code Playgroud)
......变得难以阅读.如果if机构内有更多的陈述,甚至可能都不可行.
要纠正问题中的某些内容:
据我了解,当我执行String baz ="foo"+"bar"+"123"时,java编译器在内部用StringBuilder替换表达式.
不,当您编写该表达式时,编译器会识别出它是编译时常量,并将其替换为
String baz = "foobar123";
Run Code Online (Sandbox Code Playgroud)
这是一个不明确使用a 的一个很好的理由StringBuilder- 上面的代码在执行时显然比效率更高
String baz = new StringBuilder("foo").append("bar").append("123").toString();
Run Code Online (Sandbox Code Playgroud)
当它不是编译时常量时,Java编译器将使用a执行连接StringBuilder,通常会让您使用比显式使用更容易理解的代码StringBuilder,但不会影响性能.我怀疑你的老师或者不正确理解字符串连接,或者干脆读别的地方,你应该使用StringBuilder不充分的理解时,它是适当的.
| 归档时间: |
|
| 查看次数: |
2481 次 |
| 最近记录: |