頭條面試官:String、StringBuffer、StringBuilder有什麼區別?

最近Emma在後臺收到不少留言,都是在問有關頭條的:

頭條面試官:String、StringBuffer、StringBuilder有什麼區別?

所以這次我想和大家分享一個頭條的常考點。今天要說的東西呢~ 看似很簡單,但它在所有編程語言裡又都是個非常特殊的存在。


你可能猜到了,我要說的就是字符串


不管是數量還是體積,字符串都是大多數應用中的重要組成。所以今天,我就來展開說說頭條面試中常問的:


String、StringBuffer、StringBuilder有什麼區別?


典型回答


01

String

是Java語言非常基礎和重要的類,提供了構造和管理字符串的各種基本邏輯。它是典型的Immutable類,被聲明成為fnal class,所有屬性也都是fnal的。


也由於它的不可 變性,類似拼接、裁剪字符串等動作,都會產生新的String對象。由於字符串操作的普遍性,所以相關操作的效率往往對應用性能有明顯影響。


02


StringBuffer是為解決上面提到拼接產生太多中間對象的問題而提供的一個類,我們可以用append或者add方法,把字符串添加到已有序列的末尾或者指定位置。


StringBuffer本質是一個線程安全的可修改字符序列,它保證了線程安全,也隨之帶來了額外的性能開銷,所以除非有線程安全的需要,不然還是推薦使用它的後繼者,也就是StringBuilder。


03


StringBuilder是Java 1.5中新增的,在能力上和StringBuffer沒有本質區別,但是它去掉了線程安全的部分,有效減小了開銷,是絕大部分情況下進行字符串拼接的首選。


考點分析


幾乎所有的應用開發都離不開操作字符串,理解字符串的設計和實現以及相關工具如拼接類的使用,對寫出高質量代碼是非常有幫助的。


關於這個問題,我前面的回答是一個通常的概要性回答,至少你要知道String是Immutable的,字符串操作不當可能會產生大量臨時字符串,以及線程安全方面的區別。


如果繼續深入,面試官可以從各種不同的角度考察,比如可以:

頭條面試官:String、StringBuffer、StringBuilder有什麼區別?

  • 通過String和相關類,考察基本的線程安全設計與實現,各種基礎編程實踐。
  • 考察JVM對象緩存機制的理解以及如何良好地使用。
  • 考察JVM優化Java代碼的一些技巧。
  • String相關類的演進,比如Java 9中實現的巨大變化。

……

ok~ 針對上面這幾方面,我會在下一期知識擴展部分與大家詳聊。


最後要送給大家的是專門針對字節跳動的求職資料包


本期福利


字節跳動求職資料包


頭條面試官:String、StringBuffer、StringBuilder有什麼區別?

領取方式:

關注【愛碼士Emma】頭條號,回覆口令「頭條」即可領資料包

更多技術乾貨、真題和麵試經驗分享盡在【愛碼士Emma】

我們下期再見~


分享到:


相關文章: