Java - StringBuilder 与字符串连接

Ant*_*sso -1 java stringbuilder string-concatenation

问题很简单,怎样才能更好地避免非占用内存的使用呢?例如,假设我们有 aString s = "Test"并且我们想添加1它,使其变为Test1。我们都知道s获取一个内存位置,如果我们使用StringBuilderTest1将会得到一个新的内存地址,否则它将保留在s原来的位置,如果我们使用呢concat

小智 5

一行串联被优化并转换为StringBuilder底层。内存方面是一样的,但是手动连接更简洁。

// the two declarations are basically the same
// JVM will optimize this to StringBuilder
String test = "test";
test += "test";

StringBuilder test = new StringBuilder();
test.append("test");
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您不进行简单的串联,那么使用 会更好StringBuilder

// this is worse, JVM won't be able to optimize
String test = "";
for(int i = 0; i < 100; i ++) {
    test += "test"; 
} 

// this is better
StringBuilder builder = new StringBuilder();
for(int i = 0; i < 100; i ++) {
    builder.append("test"); 
} 
Run Code Online (Sandbox Code Playgroud)