【发布时间】:2019-07-05 02:41:38
【问题描述】:
我知道使用“+”连接运算符来构建字符串是非常低效的,所以推荐使用StringBuilder类,但是我想知道这种模式是否也低效?
String some = a + "\t" + b + "\t" + c + "\t" + d + "\t" + e;
我猜这里编译器会优化赋值,还是不行?
【问题讨论】:
-
没关系。编译器可以对其进行优化。另见How is String concatenation implemented in Java 9?
-
我会谨慎地说@khelwood,我们不知道
a/b/etc 都是常量(这是它优化为文字的地方)。否则,我们可能会在这里看到的唯一优化是编译器会自行将串联与StringBuilder全部交换。在一个循环中,可能会解决很多不必要的字符串生成器。 -
这取决于 a,b,c,d 是否为常量......如果编译器可以解析这些值(在编译时),编译器将对其进行优化
-
为什么它们必须是常量?为什么正常变量会有问题? StringBuilder 也可以很好地处理变量,对吧。其他一些优化可能不起作用,但我们在谈论什么样的优化呢?
-
“优化为文字”不在问题陈述中。编译器将优化字符串连接以在涉及非常量项的单个表达式中调用
StringBuilder.append。正如所指出的,它不会在不同的行上进行连接,尽管 JIT/HotSpot 运行时编译器可能会做一些事情。
标签: java string java-8 string-concatenation