Java字符串拼接效率和String,StringBuilder,StringBuffer三者的区别
Java字符串拼接效率和String,StringBuilder,StringBuffer三者的区别
拼接字符串,用String, StringBuffer,StringBuilder。StringBuilder是jdk1.5中新增的。
测试类如下:
public class TestStringConcat {
public static void main(String[] args) {
long n = 30000;
System.out.println("Starting... ");
//String+=拼接
long start1 = System.currentTimeMillis();
String s1 = new String("hello");
for (long i = 0; i < n; i++)
{
s1+="拼接字符串的时间";
}
long end1 = System.currentTimeMillis();
long time1 = end1 -start1;
System.out.println("用String+=拼接字符串的时间"+time1);
//String=String+拼接
long start2 = System.currentTimeMillis();
String s2 = new String("hello");
for (long i = 0; i < n; i++)
{
s2=s2+"拼接字符串的时间";
}
long end2 = System.currentTimeMillis();
long time2 = end2 -start2;
System.out.println("用String=String+拼接字符串的时间"+time2);
//用String.concat拼接
long start3 = System.currentTimeMillis();
String s3 = new String("hello");
for (long i = 0; i < n; i++)
{
s3=s3.concat("拼接字符串的时间");
}
long end3 = System.currentTimeMillis();
long time3 = end3 -start3;
System.out.println("用String.concat拼接字符串的时间"+time3);
//用StringBuffer.append拼接
long start4 = System.currentTimeMillis();
StringBuffer s4 = new StringBuffer("hello");
for (long i = 0; i < n; i++)
{
s4.append("拼接字符串的时间");
}
long end4 = System.currentTimeMillis();
long time4 = end4 -start4;
System.out.println("用StringBuffer.append拼接字符串的时间"+time4);
//用StringBuilder.append拼接
long start5 = System.currentTimeMillis();
StringBuilder s5 = new StringBuilder("hello");
for (long i = 0; i < n; i++)
{
s5.append("拼接字符串的时间");
}
long end5 = System.currentTimeMillis();
long time5 = end5 -start5;
System.out.println("用StringBuilder.append拼接字符串的时间"+time5);
System.out.println("End...");
}
}
结果:
Starting...
用String+=拼接字符串的时间3411
用String=String+拼接字符串的时间3358
用String.concat拼接字符串的时间1671
用StringBuffer.append拼接字符串的时间6
用StringBuilder.append拼接字符串的时间2
End...
总结
1.首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String;
String最慢的原因:
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
2.在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的;
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
3.使用条件:
String:适用于少量的字符串操作的情况。
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。
文章摘自:https://www.cnblogs.com/su-feng/p/6659064.html
https://www.cnblogs.com/Faith-zhang/p/6374834.html
上一篇: (算法练习)——谁是你的潜在朋友
推荐阅读
-
Java字符串拼接效率和String,StringBuilder,StringBuffer三者的区别
-
java中String字符串拼接“+”和StringBuffer的效率对比
-
Java 中 String,StringBuffer 和 StringBuilder 的区别及用法
-
Java 中 String,StringBuffer 和 StringBuilder 的区别及用法
-
java 中String和StringBuffer与StringBuilder的区别及使用方法
-
java 中String和StringBuffer与StringBuilder的区别及使用方法
-
Java中的String,StringBuilder,StringBuffer三者的区别
-
java String、StringBuilder和StringBuffer的区别详解
-
Java:String、StringBuffer和StringBuilder的区别
-
Java中的String,StringBuilder,StringBuffer三者的区别