在 Java 中使用 + 连接字符串

2022-09-03 17:43:52

我有一个巨大的字符串如下:

String str = "aaaaaaa" 
        + "bbbbbbbb" 
        + "cccccccc" 
    .... 

        + "zzzzzzzz";  // about 200 lines long

这是对内存的极大浪费吗?把它放在一行还是使用会更好?这样做是为了创建一个长 sql。StringBuilder


答案 1

不。如果所有字符串都是常量(就像在你的问题中一样),编译器将在编译时执行串联。因此,这最终比版本表现得更好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";

我不记得曾经看到过这被用作合法的微优化,但它至少是一个有趣的点。


答案 2

在当前版本的Java中,每个(串联)操作都会自动编译为StringBuilder操作。但是,如果它在循环中,它将为每次迭代创建一个新的,否定其效果 - 因此您最好显式管理。+append()StringBuilderStringBuilder