Java-StringBuilder与字符串串联

Java-StringBuilder与字符串串联,java,stringbuilder,string-concatenation,Java,Stringbuilder,String Concatenation,问题很简单,什么能更好地避免使用不适当的内存?例如,假设我们有一个String s=“Test”,我们想向它添加1,使它成为Test1。我们都知道s会得到一个内存位置,如果我们使用StringBuilder,Test1会得到一个新的内存地址,或者它会保留在s的位置,如果我们使用concat,会怎么样 优化单线连接,并将其转换为引擎盖下的StringBuilder。内存方面也是一样,但是手动连接更简洁 // the two declarations are basically the same /

问题很简单,什么能更好地避免使用不适当的内存?例如,假设我们有一个
String s=“Test”
,我们想向它添加
1
,使它成为
Test1
。我们都知道
s
会得到一个内存位置,如果我们使用
StringBuilder
Test1
会得到一个新的内存地址,或者它会保留在
s
的位置,如果我们使用
concat
,会怎么样

优化单线连接,并将其转换为引擎盖下的
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");
另一方面,如果不进行琐碎的连接,那么使用
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"); 
} 
//更糟糕的是,JVM无法优化
字符串测试=”;
对于(int i=0;i<100;i++){
测试+=“测试”;
} 
//这样更好
StringBuilder=新的StringBuilder();
对于(int i=0;i<100;i++){
附加(“测试”);
} 

可能会有帮助。相关:在发布之前,始终彻底搜索堆栈溢出。