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++){
附加(“测试”);
}
可能会有帮助。相关:在发布之前,始终彻底搜索堆栈溢出。