Java語言中的String、StringBuffer和StringBuilder三者的詳細介紹

String:內容不可更改

String字符串對象的內容不可更改,更改是一種假象,實際更改的是堆內存的指向。

例如:String str = "Hello"; str+" word!";

首先系統會在棧內存中開闢一個棧空間存儲"str",然後在堆內存中開闢一個堆空間存儲"Hello",棧內存空間中的"str"指向堆內存空間的"Hello"。到" str+"word!"; "時,系統會再開闢兩個堆內存空間,一個存放" word!",另一個存放"Hello word!",然後棧內存空間中的"str"指向堆內存空間的"Hello word!",之後"Hello"與" word!"所佔的堆內存空間會因爲沒有被引用而被系統回收。所以,用String變量拼接字符串的時候與其他兩種字符串操作對象相比,較爲耗內存空間。

StringBuffer:內容可以更改

StringBuffer是String緩衝區的意思,其本身也是操作字符串,但是它與String不同,StringBuffer可以更改指向的堆內存空間存儲的內容,所以它較String省內存,但是速度較String稍慢。StringBuffer是一個操作類,所以必須通過實例化進行操作,不然會報空指針異常錯誤,而String變量可以直接賦值初始化。

StringBuilder:單線程建議優先考慮該類,速度比StringBuffer快

StringBuilder是一個可變的字符序列,該類被設計作爲StringBuffer的一個簡易替換,用在字符串緩衝區被單個線程使用的時候。因爲在線程安全上,StringBuilder是線程不安全的,而StringBuffer是線程安全的。單線程建議優先考慮該類,速度比StringBuffer快。

需要注意的是String類和StringBuffer都是被final關鍵字修飾的。對於一個final變量,如果是基本數據類型的變量,則其數值一旦在初始化之後便不能更改;如果是引用類型的變量,則在對其初始化之後便不能再讓其指向另一個對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章