在 Java 中使用 + 连接字符串
2022-09-03 17:43:52
我有一个巨大的字符串如下:
String str = "aaaaaaa"
+ "bbbbbbbb"
+ "cccccccc"
....
+ "zzzzzzzz"; // about 200 lines long
这是对内存的极大浪费吗?把它放在一行还是使用会更好?这样做是为了创建一个长 sql。StringBuilder
我有一个巨大的字符串如下:
String str = "aaaaaaa"
+ "bbbbbbbb"
+ "cccccccc"
....
+ "zzzzzzzz"; // about 200 lines long
这是对内存的极大浪费吗?把它放在一行还是使用会更好?这样做是为了创建一个长 sql。StringBuilder
不。如果所有字符串都是常量(就像在你的问题中一样),编译器将在编译时执行串联。因此,这最终比版本表现得更好。StringBuilder
否则,它将使用 (or ) 来执行任何非常数部分的串联。StringBuilderStringBuffer
所以编译的版本:
String x = "a" + "b";
应与以下各项完全相同:
String x = "ab";
请注意,“非常数”部分可能意味着您有时可以明智地使用包围块来获得(非常小的)额外效率。例如:
int value = ...;
String x = "a" + value + "b" + "c";
...效率低于:
int value = ...;
String x = "a" + value + ("b" + "c");
...作为第一个附加和单独。有效版本等效为 tO:"b""c"
int value = ...;
String x = "a" + value + "bc";
我不记得曾经看到过这被用作合法的微优化,但它至少是一个有趣的点。
在当前版本的Java中,每个(串联)操作都会自动编译为StringBuilder操作。但是,如果它在循环中,它将为每次迭代创建一个新的,否定其效果 - 因此您最好显式管理。+append()StringBuilderStringBuilder