String和StringBuilder的區別
String類型對象的特點:
1.它是引用類型,在堆上分配內存
2.運算時會產生一個新的實例
3.String 對象一旦生成不可改變(Immutable)
4.定義相等運算符(== 和 !=)是為了比較 String 對象的值(而不是引用)
String,StringBuilder類之間關系:
乍一看它們都是用於處理字符串的java類,而且長得也都差不多,相信肯定有人會以為StringBuilder都是繼承自String這個類,即認為String類是其他兩個類的超類。
但並非如此。
由此可以看出:
StringBuilder繼承自AbstractStringBuilder這個類,而AbstractStringBuilder和String都繼承自Object這個類(Object是所有java類的超類)。
String是不可變類,StringBuilder是可變類。
string本身是不可改變的,它只能賦值一次,每一次內容發生改變,都會生成一個新的對象,然后原有的對象引用新的對象,而每一次生成新對象都會對系統性能產生影響,這會降低.NET編譯器的工作效率。
StringBuilder類則不同,每次操作都是對自身對象進行操作,而不是生成新的對象,其所占空間會隨着內容的增加而擴充,這樣,在做大量的修改操作時,不會因生成大量匿名對象而影響系統性能。
二者的執行效率:
首先創建一個String對象str,並把“abc”賦值給str,然后在第三行中,其實JVM又創建了一個新的對象也名為str,然后再把原來的str的值和“de”加起來再賦值給新的str,而原來的str就會被JVM的垃圾回收機制(GC)給回收掉了,所以,str實際上並沒有被更改,也就是前面說的String對象一旦創建之后就不可更改了。
public class test{
public static void main (String[] args)
{
String str="abc";
System.out.printin(str);//輸出abc
str=str+"de";
System.out.printin(str);//輸出abcde
}
}
而StringBuilder和StringBuffer的對象是變量,對變量進行操作就是直接對該對象進行更改,而不進行創建和回收的操作,所以速度要比String快很多。
小技巧:
String:適用於少量的字符串操作,字符串不經常發生變化的時,我們可以優先使用string
總結一下
1、string繼承object類,stringbuilder繼承AbstractStringBuilder。
2、string是不可變類,stringbuilder是可變類。
3、stringstringbuilder運行速度比string快。
原文鏈接:https://blog.csdn.net/xaiolu_coco/java/article/details/104005213