首頁 > 軟體

java字元串操作類StringBuilder與StringBuffer

2021-05-23 22:31:09

在java中,最常用的類基本上非String莫屬了。String雖然不是八大基礎類型之一,但是各種常用類型、自定義的類都能夠轉換成字元串表示。就連java中的所有類的父類Object,也有一個方法叫做「toString」,由此可見字元串String在java中具有何等重要的地位。

既然字元串String如此常用,那麼使用的過程中就應該注意了。由於String本身是一個final類,一旦其物件被賦值,是不能夠修改的。

有小夥伴可能會提出異議:「我們平時在程式碼裡面不是經常重新對字元串重新賦值嗎?」

注意:對String物件重新賦值並不是修改了原物件的值,而是重新new了個String物件賦值給原變數。不信?咱們來看看程式碼。

我們看上面兩張圖,第一張圖是變數a第一次賦值,它的物件地址值用@466表示,第二張圖的時候,程式運行到變數a第二次賦值完成,物件地址值變為@468。物件地址值是物件在記憶體中的地址,好比房子的地址一般。同一棟房子,地址值是不會變化的。由此可以得出,第二次賦值過後,變數a在記憶體中的物件已經不是第一次時的物件。所以,給String字元串賦值的本質是在記憶體中重新new一個String物件。

這樣做有什麼壞處呢?

我們知道物件的創建會佔用記憶體。這裡的記憶體指的是計算機的運行記憶體,也就是記憶體條的容量。而記憶體條是一種珍貴的資源,受限於系統架構的原因,記憶體條通常是比較小的(相對於硬碟等裝置來說)。一些配置不高的伺服器比如個人網站,最小的甚至只有1個G,如果程式大量創建一些不必要的物件,就會造成記憶體不夠用,而java程式是由jvm幫我們釋放記憶體的,如果程式不合理,jvm來不及回收記憶體垃圾,就會造成記憶體浪費。

基於這個問題的存在,java推出了StringBuffer與StringBuilder兩個類。

這兩個類幾乎是一樣的,操作字元串時都不會重複創建物件,執行緒在操作StringBuffer與StringBuilder物件時,對字元串多次拼接操作的都是同一物件,如此一來就會大量減少字元串物件的創建,從而節省記憶體。

如果我們在需要保證執行緒安全的場景下對字元串進行操作,推薦使用StringBuffer。在不需要嚴格保證執行緒安全的場景下,推薦使用StringBuilder,因為StringBuilder的效率比StringBuffer高(原因是沒有同步鎖)。如圖,使用StringBuffer與StringBuilder的方式是一樣的,這兩個類的方法基本相同。這兩個字元串操作類都使用append方法對字元串進行拼接:

使用reverse方法對字元串進行反轉:

使用delete方法刪除部分字元串:

使用insert方法在某個位置插入部分字元串(如果是非字元串,比如正數1,則插入字元串「1」):

使用replace方法替換指定位置的字元串:

除了這些方法以外,這兩個字元串操作類還有一些String也有的類,小夥伴們,如果你對java感興趣,不放自己開啟電腦來寫一些小demo吧!

#程式語言#


IT145.com E-mail:sddin#qq.com