選單

java字串操作類StringBuilder與StringBuffer

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

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

java字串操作類StringBuilder與StringBuffer

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

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

java字串操作類StringBuilder與StringBuffer

java字串操作類StringBuilder與StringBuffer

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

這樣做有什麼壞處呢?

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

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

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