java - java 将字符串连接成 StringBuilder

标签 java performance concatenation stringbuilder

我有一个遗留的Java文件,它使用字符串连接来构建巨大的字符串对象。这是一个严重的性能问题。是否有一种方法可以执行以下操作

String test="I am a very bad programmer"
+"to use concatenation"
+"Instead of StringBuilder"
+" or StringBuffer";

StringBuilder strBuilder= new StringBuilder();
strBuilder.append("I am a bad programmer");
strBuilder.append("to use concatenation");
strBuilder.append("Instead of StringBuilder");
strBuilder.append(" or StringBuffer");
String str= strBuilder.toString();

基本上我需要一个java中的 stub ,只是为了将字符串实例化作为输入并转换为StringBuilder。过去有人尝试过这个吗?

最佳答案

不,这不是性能问题。例如,如果您内联连接字符串(就像您所展示的那样)而不是使用循环,则编译器会自动将 + 转换为使用 StringBuilder。查看java.lang.String的文档

The Java language provides special support for the string concatenation operator ( + ), and for conversion of other objects to strings. String concatenation is implemented through the StringBuilder(or StringBuffer) class and its append method. String conversions are implemented through the method toString, defined by Object and inherited by all classes in Java. For additional information on string concatenation and conversion, see Gosling, Joy, and Steele, The Java Language Specification.

更进一步 - 编译器可能会利用这些都是字符串常量的事实,甚至在运行时之前将它们连接起来 ( JLS references )

关于java - java 将字符串连接成 StringBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430168/

相关文章:

java - RxJava : Drop items? - 背压

java - 为什么返回 null 而不是值?

java - BufferedReader.readLine() 阻塞一段时间

python - 在 django 中的 urlencode 之前连接

c++ - C 预处理器替换和连接

javascript - GET方法上的JavaScript字符串和变量,语法错误?

java - CustomListview 在 ListView 中显示两次状态

performance - 在 Racket 中查找特定数量的素数

javascript - 操作 DOM 子项的有效方法

javascript - 我应该将 Google Analytics 异步代码段放在哪里