你真的瞭解面試問題的意義嗎?-java面試基礎篇(2)
阿新 • • 發佈:2019-02-14
一:請說出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 所以才有一個是執行緒安全的 一個是執行緒不安全的