java String,StringBuffer和StringBulder學習筆記


1.String:不可改變的Unicode字符序列。

池化思想,把需要共享的數據放在池中,用一個存儲區域來存放一些公用資源以減少存儲空間的開銷。

在String類中,以字面值創建時,回到java方法空間的串池中去查找,如果沒有則會在串池里創建一個字符串對象,並返回其地址賦給對象變量,如果有就返回串池中字符串的地址,並把這個地址賦給對象變量。如果是new,則會在堆空間中創建String類對象,不會有上述的過程。

        String s1="abc";//新創建,字符串常量池中沒有,則會在池中創建一個串“abc”
        String s2="abc";//串池中已經存在“abc”,s2會去指向“abc”而不會去創建一個新的。
        String s3=new String("abc");//直接在堆中開辟一個新的空間,而不會去池中查找。

調用任何String中的方法,不會改變String自身,除非重新復制。

2.StringBuffer:可改變的Unicode字符序列。允許並發操作,是線程安全的。

String類在進行字符串連接時回顯得效率很低,是因為它所產生的對象的屬性是不能夠修改的,當連接字符串時只能創建新的對象。

對於很多字符串連接時,應該使用StringBuffer類,這個類的對象進行字符串連接時不會有多余的中間對象生成,從而優化了效率。

        String str="A"+"B"+"C"+"D";//在串池中產生的“AB”,“ABC”明顯是對於對象,浪費空間。
        
        String s=null;
        StringBuffer sb=new StringBuffer("A");
        sb.append("B");
        sb.append("C");
        sb.append("D");
        s=sb.toString();

 

3.StringBulder:可改變的Unicode字符序列。操作同StringBuffer,不支持並發操作,非線程安全的。

 


免責聲明!

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



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