String和StringBuilder的區(qū)別
String類型對象的特點:
1.它是引用類型,在堆上分配內(nèi)存
2.運算時會產(chǎn)生一個新的實例
3.String 對象一旦生成不可改變(Immutable)
4.定義相等運算符(== 和 !=)是為了比較 String 對象的值(而不是引用)
-
String是不可變類芝薇,StringBuilder是可變類股耽。
String本身是不可改變的,它只能賦值一次,每一次內(nèi)容發(fā)生改變,都會生成一個新的對象,然后原有的對象引用新的對象,而每一次生成新對象都會對系統(tǒng)性能產(chǎn)生影響汤纸,這會降低.NET編譯器的工作效率
StringBuilder類則不同衩茸,每次操作都是對自身對象進(jìn)行操作,而不是生成新的對象贮泞,其所占空間會隨著內(nèi)容的增加而擴(kuò)充楞慈,這樣,在做大量的修改操作時啃擦,不會因生成大量匿名對象而影響系統(tǒng)性能囊蓝。
二者的執(zhí)行效率:
首先創(chuàng)建一個String對象str,并把“abc”賦值給str令蛉,然后在第三行中聚霜,其實JVM又創(chuàng)建了一個新的對象也名為str,然后再把原來的str的值和“de”加起來再賦值給新的str珠叔,而原來的str就會被JVM的垃圾回收機(jī)制(GC)給回收掉了蝎宇,所以,str實際上并沒有被更改祷安,也就是前面說的String對象一旦創(chuàng)建之后就不可更改了姥芥。
而StringBuilder和StringBuffer的對象是變量,對變量進(jìn)行操作就是直接對該對象進(jìn)行更改汇鞭,而不進(jìn)行創(chuàng)建和回收的操作凉唐,所以速度要比String快很多
總結(jié)一下
1、string繼承object類霍骄,stringbuilder繼承AbstractStringBuilder台囱。
2、string是不可變類读整,stringbuilder是可變類玄坦。
3、stringstringbuilder運行速度比string快。
三者在執(zhí)行速度方面的比較:
StringBuilder > StringBuffer > String