String、StringBuffer、與StringBuilder的區別
原文地址:
http://www.cnblogs.com/sevenlin/p/sevenlin_StringBuffer_StringBuilder20150806.html
相信大家都知道StringBuffer、StringBuilder,但是這兩個的用法都差不多,到底有什麼區別呢,這也是面試的時候問的比較多的一道題,這裡我就來說說,這兩個的區別結合String來說~
String:檢視原始碼得知,String類的宣告是:public final,所以可以很清楚的知道,fianl的話是改變不了的,所以,如果我們用String來操作字串的時候,一旦我們字串的值改變,就會在記憶體建立多一個空間來儲存新的字串,可想而知,一旦遇到複雜的操作,用String是多麼低效率的事啊!
所以,一般涉及到字串操作的,我們一般使用StringBuffer或者StringBuilder,但是這兩者都又有什麼區別呢,下面我來說說:
檢視原始碼可以得知:
StringBuffer和StringBuilder都整合了AbstractStringBuilder,而StringBuffer大部分方法都是synchronized,也就是執行緒安全的,而StringBuilder就沒有,所以,我們檢視API可以知道,StringBuilder可以操作StringBuffer,但是StringBuffer不可以操作StringBuilder,這也是執行緒的原因;
所以,可想而知,StringBuffer的效率肯定沒有StringBuilder,因為StringBuffer要維持同步鎖,這肯定要消耗部分資源,下面這個例子就可以充分證明這三者之間的關係:
package com.seven.exercise.StringTest;
import org.junit.Test;
public class StringBufferWithStringBuilder {
public void testString() {
long start = System.currentTimeMillis();
String str = null;
for (int i = 0; i < 20000; i++) {
str = str + i + ",";
}
System.out.println(System.currentTimeMillis() - start);
}
public void testStringBuffer() {
long start = System.currentTimeMillis();
StringBuffer sbuf = new StringBuffer();
for (int i = 0; i < 20000; i++) {
sbuf.append(i + ",");
}
System.out.println(System.currentTimeMillis() - start);
}
public void testStringBulider() {
long start = System.currentTimeMillis();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 20000; i++) {
builder.append(i + ",");
}
System.out.println(System.currentTimeMillis() - start);
}
@Test
public void test(){
testString();
testStringBuffer();
testStringBulider();
}
}
執行結果如下:
1217
9
6
效率:StringBuilder>StringBuffer>String,所以,如果這是考慮單執行緒程式的話,用StringBuilder,如果涉及到多執行緒的,那隻能是StringBuffer,具體業務具體選擇,要具體瞭解請檢視API或者檢視原始碼!
相關文章
- String,StringBuffer與StringBuilder的區別UI
- String,StringBuffer與StringBuilder的區別??UI
- String,StringBuilder,StringBuffer的區別UI
- String、StringBuilder、StringBuffer的區別UI
- String、StringBuffer、StringBuilder的區別UI
- String、StringBuffer、StringBuilder區別?UI
- String,StringBuffer,StringBuilder區別UI
- String、StringBuffer與StringBuilder之間區別UI
- 『Java 語法基礎』String、StringBuffer 與 StringBuilder 的區別JavaUI
- 面試必知:String、StringBuilder、StringBuffer的區別面試UI
- String, StringBuilder, StringBuffer 之間的區別 - JavaUIJava
- String StringBuffer StringBuilder 三者的區別UI
- Android- String、StringBuffer、StringBuilder區別AndroidUI
- Java中String/StringBuffer/StringBuilder區別(轉)JavaUI
- 從原始碼看String,StringBuffer,StringBuilder的區別原始碼UI
- StringBuilder StringBuffer String的區別(原始碼分析)-javaUI原始碼Java
- String StringBuffer StringBuilder的區別(前端面試必備)UI前端面試
- java中String、StringBuilder、StringBuffer三者的區別JavaUI
- Java中String,StringBuffer和StringBuilder的區別(轉載)JavaUI
- Java中的String,StringBuilder,StringBuffer三者的區別JavaUI
- 關於String與StringBuffer的區別
- JAVA中String與StringBuffer的區別Java
- StringBuffer和StringBuilder的區別UI
- StringBuilder和StringBuffer的區別UI
- Java的JDK下StringBuffer與StringBuilder的區別JavaJDKUI
- Java 原始碼出發徹底搞懂String與StringBuffer和StringBuilder的區別Java原始碼UI
- stringbuilder和stringbuffer區別UI
- String,StringBuffer, StringBuilder 的區別是什麼?String為什麼是不可變的?UI
- String、StringBuffer、StringBuilder的理解UI
- StringBuilder、StringBuffer和String三者的聯絡和區別(轉)UI
- StringBuilder和String 的區別?UI
- StringBuilder和String的區別UI
- String和StringBuilder的區別UI
- String、StringBuffer、StringBuilder剖析UI
- String、StringBuilder和StringBufferUI
- Java 之String、StringBuffer 和 StringBuilder 三者區別介紹JavaUI
- StringBuffer 和 StringBuilder 的 3 個區別UI
- String、StringBuffer和StringBuilder類的UI