String,StringBuffer 和StringBuilder三者的區別

前言

筆者因為遇到這樣的面試題答的不夠全面,經過谷歌后在這里和大家說下,還會跟大家聊一下其應用的場景(筆者不怎么喜歡背書式地將教科書上的內容拿出來講,除非真的很必要)

String

String 對象一旦被創建,它就不能被修改,其對象會被存儲在String 常量池中。String 對象不能同時地被兩個線程使用。

StringBuffer

StringBuffer是可修改的,意味著StringBuffer 聲明的對象的值是可變的。而StringBuffer 創建的對象都會別存放在堆(heap)中,StringBuffer 和StringBuilder 有著相同的方法,但在StringBuffer的方法中,如果其方法是同步的,那么StringBuffer線程安全。
由于它不允許兩個線程同時訪問同一個方法,每個方法都只能由一個線程訪問一次。但是線程安全也會帶來缺點,那就是性能會大大折扣。因此當調用每個類的方法相同時,StringBuilder 的速度要快于StringBuffer.(這個在面試中常被問到)。
如果StringBuffer 要轉換為String 可以用toString()方法。

StringBuilder

StringBuilder 和StringBuffer 差不多相同,它們都繼承于AbstactStringBuilder,StringBuilder同樣是將新建的對象存放于堆中,也同樣能被修改.主要的區別是StringBulider線程不安全,但它的速度快。

尾語

如果上訴有誤的話,歡迎提出

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 相關概念 面向對象的三個特征 封裝,繼承,多態.這個應該是人人皆知.有時候也會加上抽象. 多態的好處 允許不同類對...
    東經315度閱讀 2,005評論 0 8
  • 【俱舍】柔克 原創 既張我弓,既挾我矢。 “張”字,本義就是安上弓弦或拉緊弓弦。 《說文解字》:“張,施弓弦也。從...
    俱舍閱讀 1,096評論 0 1
  • 最近有一個業務上的需求: 每次創建一條記錄時需要清理一下redis緩存,于是想到了django的signals,因...
    wu_sphinx閱讀 3,338評論 0 1
  • 你敢和你男(女)朋友一起去旅行嗎? 1 群聊天欄窗口里,阿峰發來3個V手勢勝利表情。 “湖南旅行回來后,終于分了。...
    吃顆糖啦閱讀 6,806評論 33 54
  • 最近工作辭了,閑置在家。
    漫漫漫兒閱讀 327評論 0 3