1. 程式人生 > >String/StringBuilder/StringBuffer效能對比

String/StringBuilder/StringBuffer效能對比

String

 String s="a";
 s=s+1;

虛擬機器解析這段程式碼時,建立物件s,賦予一個a,當執行到第二句的時候,先建立一個左邊的s物件,此時的s並不等於之前建立的s,然後給新的s賦值s+1的值,s+1中的s和第一個s是同一個。裡面存放a那個值,所以說之前物件s並沒有變化,足以說明String型別是不可改變的物件。由於這種機制,每當用String操作字串時,實際上是在不斷的建立新的物件,而原來的物件就會變為垃圾被GC回收掉,可想而知這樣執行效率會有多底。

String與StringBuilder效能對比

效能比較差

String str1 = "yang";
String
str2 = "de"; String str3=str1+str2;

上面已經證明String物件是不可變的,所以每次對String物件做改變操作(譬如“+”操作)時其實都生成了新的String物件例項,所以會導致記憶體消耗效能問題

效能表現較好

 StringBuilder sb = new StringBuilder().append(str1).append(str2);

StringBuffer物件做改變操作每次都會對自己進行操作,所以不需要消耗額外的記憶體空間。

String和StringBuffer效能對比

效能好

 String Str = "a" + "b"
;

效能差

 StringBuffer sbf = new StringBuffer().append("a").append("b");

在這種情況下你會發現StringBuffer的效能反而沒有String的好,原因是在JVM解釋時認為
String Str = “a” + “b”;就是String Str = “ab”;所以自然比StringBuffer快了。

可以發現,如果我們拼接的是字串常量則String效率比StringBuffer高,如果拼接的是字串物件,則StringBuffer比String效率高。

StringBuffer和StringBuilder區別

StringBuffer和StringBuilder都繼承自同一個父類,只是StringBuffer是執行緒安全的,另外一個兄弟是執行緒非安全的,也就是說在不考慮多執行緒情況下StringBuilder的效能又比StringBuffer高。當然大多數情況下就是我們是在單執行緒下進行的操作,所以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因

總結
1.如果要操作少量的資料用 = String
2.單執行緒操作字串緩衝區 下操作大量資料 = StringBuilder
3.多執行緒操作字串緩衝區 下操作大量資料 = StringBuffer

相關推薦

String/StringBuilder/StringBuffer效能對比

String String s="a"; s=s+1; 虛擬機器解析這段程式碼時,建立物件s,賦予一個a,當執行到第二句的時候,先建立一個左邊的s物件,此時的s並不等於之前建立的s,然後給新的s賦值s+1的值,s+1中的s和第一個s是同一個。裡面存放

String StringBuilder StringBuffer 對比 總結得非常好

作者:每次上網衝杯Java時,都能看到關於String無休無止的爭論。還是覺得有必要讓這個討厭又很可愛的String美眉,赤裸裸的站在我們這些Java色狼面前了。嘿嘿.... 眾所周知,String是由字元組成的串,在程式中使用頻率很高。Java中的String是一個類

String,StringBuilder,StringBuffer三者的區別

情況 會有 特殊 nbsp blog imp 太多的 理解 this 1.三者在執行速度方面的比較:StringBuilder > StringBuffer > String   2.String <(StringBuffer,StringBuild

String/StringBuilder/StringBuffer

har 常量值 數據 基本數據類型 class文件 jvm 原因 用法 保存 轉載自:http://www.cnblogs.com/xrq730/p/4841518.html public class TestMain { public static void

String,StringBuilder,StringBuffer的區別?

1.執行速度,在這方面執行速度快慢為:StringBuilder >StringBuffer >String String 最慢的原因: String 為字串常量,而StringBuilder 和 StringBuffer 均為字串變數,即 String 物件一旦建立之後

String,StringBuilder,StringBuffer區別

String類是final類,也即意味著String類不能被繼承,並且它的成員方法都預設為final方法 只有在確定不想讓該方法被覆蓋時,才將方法設定為final 無論是sub操、concat還是replace操作都不是在原有的字串上進行的,而是重新生成了一個新的字串物件。也就是說進行這些操作後,最原始的

String StringBuilder StringBuffer三者的區別

執行速度:StringBuilder>StringBuffer>String String是常量,一旦建立不可更改,在程式碼中模擬是累加字串,實際上是JVM回收該物件,並重建立物件來重新賦值(假象) String str="hello"; str=str+"world"; StringB

String,StringBuilder,StringBuffer之間的區別(轉)

1.執行速度快慢為:StringBuilder>StringBuffer>String String最慢的原因:String為字串常量,而StringBuilder和StringBuffer均為字串變數,即String物件一旦建立後該物件時不可更改的 String str="

深入理解String,StringBuilder,StringBuffer

首先明確什麼是不可變字元序列? 我們都知道在Java中, String類是不可變的。那麼到底什麼是不可變的物件呢? 可以這樣理解:如果一個物件建立完成之後,不能再改變它的狀態,那麼該物件就是不可變的。不能改變狀態的意思是,不能改變物件內的屬性,包括基本資料型別的

String ,StringBuilder ,StringBuffer

String :被final修飾,是常量,不可被改變,適用於少量的字串操作 StringBuilder:是變數,可被改變,適用於單執行緒大量字串操作,執行緒不安全 StringBuffer: 是變數,可被改變,適用於多執行緒大量字串操作,執行緒安全,因為類被sy

String,StringBuilder,StringBuffer三者之理解

.首先說執行速度,或者說是執行速度,在這方面執行速度快慢為:StringBuilder > StringBuffer > String String最慢的原因: String為字串常量,而StringBuilder和StringBuffer均為字串

java面試題String,StringBuilder,StringBuffer

       面試的經歷中,相信大家都經常被問到這三者的區別,說到String我相信絕大多數的人都會說:"String是不可變的,final修飾的",你會看到面試官微微猥瑣一笑,接著問到:“fina

String,StringBuilder,StringBuffer的區別

build sync 直接 沒有 一個 場景 使用 大量 出現 1.運行速度:StringBuilder >StringBuffer >String String為字符串常量,而StringBuilder和StringBuffer均為字符串變量,即String

String,StringBuilder,StringBuffer時間比較

pro pri public code tar rgs end art std String,StringBuilder,StringBuffer時間比較 1 package com.cst.iprocess.controller;

JDK原始碼分析系列---String,StringBuilder,StringBuffer

1.String public final class String implements java.io.Serializable, Comparable<String>, CharSequence { //儲存字元,final修飾 private final char

StringBuilder類詳解和StringStringBufferStringBuilder的操作效對比

StringBuilder類詳解和String、StringBuffer、StringBuilder的操作效對比 1. StringBuilder類 2. 比較一下String、StringBuffer、StringBuilder三者在插入的時候的

StringStringBufferStringBuilder之間區別 .RP

什麽 方式 tr1 abcd 為什麽 mes strong 速度 一點   最近學習到StringBuffer,心中有好些疑問,搜索了一些關於String,StringBuffer,StringBuilder的東西,現在整理一下。 關於這三個類在字符串處理中的位置不言而喻,

四:Java之字符串操作StringStringBufferStringBuilder

equal const wstring str asi 有時 string對象 階段 stringbu string是我們經經常使用到的一個類型,事實上有時候認為敲代碼就是在重復的操作字符串,這是C的特點,在java中。jdk非常好的封裝了關於字符串的操

StringStringBufferStringBuilder之間區別

安全 .com 學習 ron img build tro ges 變量   大家在最初結束String字符串的時候,都會被教做認為String是不可變的字符串常量,是不可改變的常量。但是我們看下面的一個列子:   為什麽會發生這種情況呢?難道最開始我們學習的就是錯誤的?

StringStringBufferStringBuilder三者的區別

不可變 abcd ges 區別 ++ 源碼 重新 strong blog 簡單的說: String:創建的是字符串常量,創建的字符串會放入內存的常量池中,是不可變的對象。如果要對String類型的內容進行改變,實際上每次改變都會重新new一個String類型的字符串對象,指