String、Stringbuffer、StringBuilde
2018-04-13 本文已影响2人
n油炸小朋友
执行速度上的区别
一般情况下:StringBuilder > StringBuffer > String
String执行速度慢的原因
因为String是字符串常量,是不可改变的对象。
在执行
String s = "abcd";
s = s+"cdf";
JVM是这样解析这段代码的:首先创建对象s,赋值"abcd",然后再创建一个新的对象s赋值"abcdcdf",由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,这样执行效率很低。
特殊例子
String str = "a" + "b" + " c";
StringBuffer builder = new StringBuilder("a").append(" b").append("c");
这时候string比StringBuffer快,理由是String str = "a" + "b" + " c";
事实上是String str = "abc";
要是
String str1 = "a";
String str2 = "b";
String str3 = "c";
String str4 = str3 +str2+ str1;
那么,这时候jvm就会按照原来的方式来做。
StringBuffer和StringBuilder的区别
来看看源码:
stringBuffer.png stringbuilder.png
-
StringBuilder:线程非安全的
-
StringBuffer:线程安全的
总结
1.如果要操作少量的数据用 String
2.单线程操作字符串缓冲区或者保证线程安全的情况下操作大量数据 StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 StringBuffer