1. 程式人生 > >你真的瞭解面試問題的意義嗎?-java面試基礎篇(2)

你真的瞭解面試問題的意義嗎?-java面試基礎篇(2)

一:請說出String StringBuffer StringBuilder區別

這個是一個很基礎的問題,簡單就幾句話,但是面試官是真的想聽你背這幾句話嗎? 我們是不是應該從原理上去分析呢?我們這裡通過字串拼接來簡單分析一下

        String ,不可改變類,所以在做字串操作的時候是一直在生成新的物件  原來的物件就會變成垃圾被gc回收
        StringBuffer和StringBuilder 是可變的,其內部原理是 預設初始化一個長度為16的 char[16] 陣列,append方法是通過動態擴容來實現字串的拼接  但是這樣會導致每做一次append  之前生成的char陣列都會變成垃圾 被回收.   
        當呼叫toString的時候 因為該方法是public  為了保證不受影響,copy一份來生成一個新String
        (這是對該方法的註釋 The contents of the subarray are copied; subsequent modification of the character array does not affect the newly created string.)
        StringBuffer 和StringBuilder 都是繼承的 AbstractStringBuilder 這個類   但是append方法是各自實現的,器原理相同 都是動態char[]擴容    但是StringBuffer是加了syschnized
        public StringBuilder append(String str)
        public synchronized StringBuffer append(String str)
        所以StringBuilder 效率高於StringBuffer
        所以才有一個是執行緒安全的  一個是執行緒不安全的