日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...

發布時間:2023/12/4 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在學習Java的時候,遇到了這樣一個問題,就是String,StringBuilder以及StringBuffer這三個類之間有什么區別呢,自己從網上搜索了一些資料,有所了解了之后在這里整理一下,便于大家觀看,也便于加深自己學習過程中對這些知識點的記憶,如果哪里有誤,懇請指正。

這三個類之間的區別主要是在兩個方面,即運行速度和線程安全這兩方面。

首先說運行速度,或者說是執行速度,在這方面運行速度快慢為:StringBuilder > StringBuffer > String

String最慢的原因:

String為字符串常量,而StringBuilder和StringBuffer均為字符串變量,即String對象一旦創建之后該對象是不可更改的,但后兩者的對象是變量,是可以更改的。以下面一段代碼為例:

1 String str="abc";2 System.out.println(str);3 str=str+"de";4 System.out.println(str);

如果運行這段代碼會發現先輸出“abc”,然后又輸出“abcde”,好像是str這個對象被更改了,其實,這只是一種假象罷了,JVM對于這幾行代碼是這樣處理的,首先創建一個String對象str,并把“abc”賦值給str,然后在第三行中,其實JVM又創建了一個新的對象也名為str,然后再把原來的str的值和“de”加起來再賦值給新的str,而原來的str就會被JVM的垃圾回收機制(GC)給回收掉了,所以,str實際上并沒有被更改,也就是前面說的String對象一旦創建之后就不可更改了。所以,Java中對String對象進行的操作實際上是一個不斷創建新的對象并且將舊的對象回收的一個過程,所以執行速度很慢。

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

另外,有時候我們會這樣對字符串進行賦值

1 String str="abc"+"de";2 StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");3 System.out.println(str);4 System.out.println(stringBuilder.toString());

這樣輸出結果也是“abcde”和“abcde”,但是String的速度卻比StringBuilder的反應速度要快很多,這是因為第1行中的操作和

String str="abcde";

是完全一樣的,所以會很快,而如果寫成下面這種形式

1 String str1="abc";2 String str2="de";3 String str=str1+str2;

那么JVM就會像上面說的那樣,不斷的創建、回收對象來進行這個操作了。速度就會很慢。

2. 再來說線程安全

在線程安全上,StringBuilder是線程不安全的,而StringBuffer是線程安全的

如果一個StringBuffer對象在字符串緩沖區被多個線程使用時,StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證線程是安全的,但StringBuilder的方法則沒有該關鍵字,所以不能保證線程安全,有可能會出現一些錯誤的操作。所以如果要進行的操作是多線程的,那么就要使用StringBuffer,但是在單線程的情況下,還是建議使用速度比較快的StringBuilder。

3. 總結一下

String:適用于少量的字符串操作的情況

StringBuilder:適用于單線程下在字符緩沖區進行大量操作的情況

StringBuffer:適用多線程下在字符緩沖區進行大量操作的情況

寫在最后:以上這些總結的內容絕大多數是我從網上以及書上找來的,寫在這里是想把自己所學的分享給大家,方便大家學習,同時也有助于自己記憶,如果有哪里不對的懇請指正

總結

以上是生活随笔為你收集整理的java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。