String,StringBuffer,StringBuidler有什麼區別?

String,StringBuffer,StringBuilder有什麼區別呢?

大多數面試官會問道這樣的一道基礎面試題。

區別

  • String是Java語言非常基礎也是非常重要的類,提供了構造器和和管理字符串的各種邏輯,它是典型的Immutable類(Immutable是Java的一種不可變類機制),所有的屬性都是不可變的(final關鍵字修飾)。也由於不可變性:類似拼接、裁剪等字符串操作都會產生新的String對象。所有效率低
  • StringBuffer的出現正是爲了解決String產生的問題(產生新的String對象)而提供的一個類,我們可以利用append或者add方法,把字符串添加到已有序列的末尾或者指定位置。StringBuffer本質是一個線程安全的可修改的字符串序列,爲了保證線程安全,也帶來了額外的性能開銷。
  • StringBuilder是Java1.5新增的,在能力上和StringBuffer沒有區別,但是去掉了線程安全的部分,減小了開銷。
名稱 可變性 安全 性能效率
String final 不可變 安全 字符串操作產生新的String對象,效率低
StringBuffer 可變 安全 有額外的開銷維護線程安全,性能開銷相對大
StringBuilder 可變 不安全 性能開銷小,效率高

其他

  • 什麼是Immutable?
    • Immutable不可變的。所以天生線程安全。由於不可變在拷貝的時候不需要額外的複製數據
  • StringBuffer爲什麼線程安全
    • StringBuffer通過把各種修改數據的方法都加上了synchronized關鍵字。
  • StringBuffer和StringBuilder爲什麼可以修改字符串序列?
  • StringBuffer和StringBuilder都繼承了AbstractStringBuilder(裏面包含了基本操作,區別是否加入synchronized)
  • 底層都是利用可修改的數組(char,JDK9是byte),默認大小是字符串長度16
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章