自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

StringBuffer和StringBuilder的3個區(qū)別

開發(fā) 后端
今天,帶大家徹底搞懂 StringBuffer 和 StringBuilder 的幾個區(qū)別和它們的應用場景。

StringBuffer 和 StringBuilder 它們都是可變的字符串,不過它們之間的區(qū)別是 Java 初中級面試出現(xiàn)幾率十分高的一道題。這么簡單的一道題,在面試過程中卻經(jīng)常遇到很多求職者說反,搞不清使用場景的情況。

今天,帶大家徹底搞懂 StringBuffer 和 StringBuilder 的幾個區(qū)別和它們的應用場景,如果你是大牛,請略過,如果你是菜鳥,或者對這兩個不是很清楚,可以學習一下,也可以為年底的面試加油沖刺。

[[351947]]

先看看 StringBuffer 和 StringBuilder 的類結(jié)構吧:

其實很簡單,就是繼承了一個抽象的字符串父類:AbstractStringBuilder。下面我們再來看看它們的三個區(qū)別。

區(qū)別1:線程安全

StringBuffer:線程安全,StringBuilder:線程不安全。因為 StringBuffer 的所有公開方法都是 synchronized 修飾的,而 StringBuilder 并沒有 StringBuilder 修飾。

StringBuffer 代碼片段:

  1. @Override 
  2. public synchronized StringBuffer append(String str) { 
  3.     toStringCache = null
  4.     super.append(str); 
  5.     return this; 

區(qū)別2:緩沖區(qū)

StringBuffer 代碼片段:

  1. private transient char[] toStringCache; 
  2.  
  3. @Override 
  4. public synchronized String toString() { 
  5.     if (toStringCache == null) { 
  6.         toStringCache = Arrays.copyOfRange(value, 0, count); 
  7.     } 
  8.     return new String(toStringCache, true); 

StringBuilder 代碼片段:

  1. @Override 
  2. public String toString() { 
  3.     // Create a copy, don't share the array 
  4.     return new String(value, 0, count); 

可以看出,StringBuffer 每次獲取 toString 都會直接使用緩存區(qū)的 toStringCache 值來構造一個字符串。

而 StringBuilder 則每次都需要復制一次字符數(shù)組,再構造一個字符串。

所以,緩存沖這也是對 StringBuffer 的一個優(yōu)化吧,不過 StringBuffer 的這個toString 方法仍然是同步的。

區(qū)別3:性能

既然 StringBuffer 是線程安全的,它的所有公開方法都是同步的,StringBuilder 是沒有對方法加鎖同步的,所以毫無疑問,StringBuilder 的性能要遠大于 StringBuffer。

總結(jié)

所以,StringBuffer 適用于用在多線程操作同一個 StringBuffer 的場景,如果是單線程場合 StringBuilder 更適合。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2012-06-17 13:08:54

Stringstringbuldestringbuffe

2024-03-07 16:12:46

Java字符串線程

2009-06-12 09:52:49

StringStringBuffeJava

2021-02-21 08:19:55

面試StringStringBuffe

2009-08-27 13:50:08

C# StringBu

2010-04-16 15:15:28

思科認證華為3COM認證

2023-01-28 09:52:39

2021-03-15 08:38:42

StringBuffeJava基礎Java開發(fā)

2020-10-28 09:50:33

SpringBootJava

2011-10-14 09:53:52

HTML 5

2021-03-01 11:39:34

機器學習深度學習人工智能

2020-06-16 09:30:09

云計算IT公共云

2009-09-07 09:59:07

思科認證CCNA華為認證H3CNE區(qū)別

2020-04-02 10:18:20

容器Kubernetes云計算

2021-08-17 11:02:24

isEmptyisBlankJava

2013-02-22 13:14:06

WebCSS2.1CSS3+

2021-12-30 11:04:04

微軟

2009-06-30 15:18:10

StringBuildJava

2014-11-28 09:47:26

Python

2021-08-04 08:33:59

TypeScriptConst Readonly
點贊
收藏

51CTO技術棧公眾號