使用+在Java中连接字符串

fas*_*ava 14 java string concatenation

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

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

        + "zzzzzzzz";  // about 200 lines long
Run Code Online (Sandbox Code Playgroud)

这是对记忆的大浪费吗?将它放在一行还是使用它会更好StringBuilder吗?这样做是为了创建一个长sql.

Jon*_*eet 25

不会.如果所有字符串都是常量的,编译器将在编译时执行连接(因为它们在您的问题中).所以最终表现比版本更好StringBuilder.

否则,它将使用StringBuilder(或StringBuffer)执行任何非常量部分的串联.

所以编译版本:

String x = "a" + "b";
Run Code Online (Sandbox Code Playgroud)

完全相同:

String x = "ab";
Run Code Online (Sandbox Code Playgroud)

请注意,"非常量"部分可能意味着您有时可以明智地使用包围来获得(非常小的)额外效率.例如:

int value = ...;
String x = "a" + value + "b" + "c";
Run Code Online (Sandbox Code Playgroud)

......效率低于:

int value = ...;
String x = "a" + value + ("b" + "c");
Run Code Online (Sandbox Code Playgroud)

......作为第一个附加"b""c"分开.高效版本相当于:

int value = ...;
String x = "a" + value + "bc";
Run Code Online (Sandbox Code Playgroud)

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

  • 编译器不会/不应该为您进行微优化吗?或者,从另一个角度来看,可以有`foo`的任何值,其中`(foo +"a")+"b"`与`foo +"ab"`有什么不同? (3认同)