String、StringBuffer、StringBuilder理解

1、
String 字符串常量;
StringBuffer 字符串變量;
StringBuilder 字符串變量;
這裏一個最大的區別是,String是常量即一個不可變的對象,則一旦賦值,後面再改變的話,就需要重新創建一個字符串對象並指向對象。
而其他兩個都是有一個緩衝區(默認長度16),即是可以一定範圍改變,而不需要重新申請空間創建對象,但是如果字符串長度改變超過緩衝區大小,則需要重新申請一個更大的空間來保存字符串對象,並把原來的複製到新的空間(字符數組)。
但StringBuffer與StringBuilder之間還是有區別,在於StringBuffer是線程安全的,即同步的,多線程對其操作都是按先後串行順序執行,所以因此也是比較慢與StringBuilder相比;相反,StringBuilder線程不安全,即異步的,也因此相比StringBuffer要快。
速度上,大多數情況下,StringBuilder>StringBuffer>String
但是有些情況下,String還是比較快的,比如String s=”abc”+”def”;這是因爲JVM直接當做String s=”abcdef”;但是如果s1=”abc”;s2=”def”;String s=s1+s2;則速度就很慢。
因此,
String:適用於不易改變的字符串
StringBuffer:適用於易修改,且會發生多線程同步問題;
StringBuilder:適用於易修改,且不會發生線程安全問題;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章