【发布时间】:2021-04-09 10:00:35
【问题描述】:
我正在处理一个包含大量遗留代码的应用程序。
我经常看到的是在 StringBuilder 参数中使用“+”进行字符串连接。
示例:
StringBuilder sb = new StringBuilder("This "
+ "looks "
+ "rather "
+ "weird "
+ "to "
+ "me.")
据我所知,编译器将使用 + 运算符的字符串连接替换为 StringBuilder().append()。
恐怕现在编译器会创建一个临时 StringBuilder 来执行连接,然后转换为 toString() 并将结果插入现有的 StringBuilder。
我的问题是:编译器是否能够优化嵌套的 StringBuilder ?如果不是,我应该重写代码以节省几个 CPU 周期吗?它显然有效,但每次看到它都会伤害我的眼睛。
感谢您的任何见解!
【问题讨论】:
-
你在哪里看到
compiler replaces a string concatenation that uses the + operator with StringBuilder().append()?如果这是真的,我们不会关心使用 StringBuilder 或字符串连接 -
@azro:这个逻辑根本不符合。
StringBuilder允许您动态地 追加(例如在循环中)。我相信+确实使用StringBuilder。 -
@azro 是的,通过
+使用连接将隐式转换为使用StringBuilder。只有在连接多个语句时,尤其是循环时,才应该显式使用StringBuilder。 -
@azro: 在调用栈中可以看到
标签: java stringbuilder