Java中String、StringBuffer、StringBuilder的使用

1.String的缺點

小編在前幾天的學習中遇到了一道簡單的java題目,也就是前面提到的大小寫的轉換。其中是字符串的大小寫轉換。其中涉及到了字符串的定義,關於字符串的操作,我們有以下幾個類,我們來說說他們各自的特點

String類:java中的字符串是屬於對象,java中使用String對字符串進行操作,需要注意的是,String操作的字符串的值是不可以進行改變的,即,固定值,所以每次對String的操作都會生成新的String對象,這樣會是的效率遍地,並且很佔存儲空間。

以下圖操作爲例

注:這個是我自己畫的草圖,還是俺上學時候的草稿信紙呢,上學時候買了太多竟然用到了現在。

我們能夠看到初始化String的值爲“hello”。然後後面加上新的字符串“world”,這個過程是需要重新在堆內存中創建空間的,最後“hello world”字符串也需要在堆內創建空間。就是我們平時所打印一盒hello world就需要進行三次內存空間的創建

 

正因爲 String對字符串的操作存在不可更改的特性,因此引入了StringBuffer和StringBuilder類,這倆種方法可以對堆上存儲的對象進行操作以及更改。

2.StringBuffer和StringBuilder方法

1)和String類不同的是:StringBuffer類和 StringBuilder類定義的對象能夠被多次修改,並且不產生新的未使用對象。

2)StringBuffer類和 StringBuilder類的區別是什麼呢?

區別主要是:StringBuffer類的方法是線程安全的,可以同步訪問,速度慢;StringBuilder類的方法不是線程安全的,不能同步訪問,速度快

3)那麼爲神馬StringBuffer類的方法是線程安全的呢?

一個StringBuffer對象在字符串緩衝區內部被多個線程使用,StringBuffer中方法帶有synchronized關鍵字,因此能夠保證線程是安全的。但StringBuilder的類,被定義的對象中的方法使用時則沒有synchronized關鍵字,因此不能保證線程安全,會出現一些錯誤的情況。

如果要進行的操作是多線程的,那麼請使用StringBuffer;如果是單線程的情況,建議使用速度比較快的StringBuilder。

4)那麼String、StringBuffer、StringBuilder的運行速度是什麼樣的呢?

StringBuilder > StringBuffer > String

String最慢原因:String爲字符串常量,而StringBuilder和StringBuffer均爲字符串變量。String對象一旦創建之後該對象是不可更改的,但StringBuilder和StringBuffer均爲字符串變量,是可以更改的。

對於StringBuilder和StringBuffer來說,他們的對象是變量,對變量進行操作就是直接對該對象進行更改,而不進行創建和回收的操作,所以速度要比String快很多。

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