【发布时间】:2012-02-04 00:27:09
【问题描述】:
对于字符串连接,我们可以使用concat() 或连接运算符(+)。
我尝试了以下性能测试,发现concat() 是一种更快且内存高效的字符串连接方式。
100,000次的字符串连接比较:
String str = null;
//------------Using Concatenation operator-------------
long time1 = System.currentTimeMillis();
long freeMemory1 = Runtime.getRuntime().freeMemory();
for(int i=0; i<100000; i++){
str = "Hi";
str = str+" Bye";
}
long time2 = System.currentTimeMillis();
long freeMemory2 = Runtime.getRuntime().freeMemory();
long timetaken1 = time2-time1;
long memoryTaken1 = freeMemory1 - freeMemory2;
System.out.println("Concat operator :" + "Time taken =" + timetaken1 +
" Memory Consumed =" + memoryTaken1);
//------------Using Concat method-------------
long time3 = System.currentTimeMillis();
long freeMemory3 = Runtime.getRuntime().freeMemory();
for(int j=0; j<100000; j++){
str = "Hi";
str = str.concat(" Bye");
}
long time4 = System.currentTimeMillis();
long freeMemory4 = Runtime.getRuntime().freeMemory();
long timetaken2 = time4-time3;
long memoryTaken2 = freeMemory3 - freeMemory4;
System.out.println("Concat method :" + "Time taken =" + timetaken2 +
" Memory Consumed =" + memoryTaken2);
结果
Concat operator: Time taken = 31; Memory Consumed = 2259096
Concat method : Time taken = 16; Memory Consumed = 299592
如果concat() 比运算符快,那么我们什么时候应该使用串联运算符(+)?
【问题讨论】:
-
关于唯一看起来不同的是,当您添加的字符串长度为零时,它只会返回原始字符串,而不是创建新字符串。 + 运算符可能有点贵……如果您正在执行数百或数千个字符串构建操作,请查看 StringBuffer.append()。通常会看到一个方法建立一个 StringBuffer,然后在最后返回或使用 theBuffer.toString()。
-
@PankajKumar 好吧,你可能想要 StringBuilder 而不是 StringBuffer