java String,StringBuilder和StringBuffer類的區別


對String而言:

String是只讀字符串,所引用的字符串不能被改變,一經定義,無法再增刪改。

String 定義的字符串保存在常量池里面,進行+操作時不能直接在原有基礎上拼接。

每次+操作 : 隱式在堆上new了一個跟原字符串相同的StringBuilder對象,再調用append方法 拼接+后面的字符。

例如: 

String str1="ss";                          StringBuilder str2=new StringBuilder(ss);
str1=str1+"oo";     等於                    str2.append(oo);

(Java6和6之前,常量池是存放在方法區中的。

Java7,將常量池是存放到了堆中,常量池就相當於是在永久代中,所以永久代存放在堆中。

Java8之后,取消了整個永久代區域,取而代之的是元空間。沒有再對常量池進行調整。)

區別

String是只讀字符串,所引用的字符串不能被改變,Stringbuffer和Stringbuilder定義的可以通過各種方法來達到簡單的增刪改;

String和Stringbuilder在單線程環境下使用;

StringBuffer在多線程環境下使用,可以保證線程同步;

Stringbuilder 和StringBuffer 實現方法類似,均表示可變字符序列,不過StringBuffer 用synchronized關鍵字修飾(保證線程同步)

運行速度

當需要對某一字符串大量重復+操作時:

Stringbuilder 最快,不需要考慮線程同步;

StringBuffer次之;

String最慢,因為每次都要重新開辟內存,產生很多匿名對象,影響系統性能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM