最近在學習java的時候,遇到了一個問題,就是String和StringBuilder之間到底有什么區別呢?基于自己學習程序的了解和網上資料的了解,大致整理了一下,便于加深自己的理解,也希望幫助更多需要了解的人,如果哪里有誤,懇請指正,
首先我們先來了解這兩個類:
String:
String類代表字串, Java程式中的所有字串文字(例如"abc" )都被實作為此類的實體,
字串不變; 它們的值在創建后不能被更改, 字串緩沖區支持可變字串, 因為String物件是不可變的,它們可以被共享, 例如:
String str = "abc";
相當于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
特點:
String通過new創建的字串物件,每一次new都會申請一個記憶體空間,雖然內容相同,但是地址不同,以雙引號方式給出的字串,只要字符序列相同(順序和大小寫),無論在程式代碼中出現幾次,jvm都只會建立一個String物件,并在字串池中維護,整理這段文字,大概可以理解成new后雖然可能相同,但是地址一定是不同的,而本質上卻又是同一個物件,
StringBuilder:
一個可變的字串類,我們可以把它看成一個容器,這里的可變值的是StringBuilder物件中的內容是可變的,值得注意的點是,前面賦的值會被后面賦的值所替代,輸出的物件也會更新為最新賦的值,可以理解成StringBuilder只能裝一個資料,后面只要資料更新,前面賦的值都會變成資料更新這個值 ,
例如:
StringBuilder sb = new StringBuilder;
StringBuilder sb2 = sb.append("hello");
System.out.println("1:"+sb)
System.out.println("2:"+sb2)
System.out.println(sb==sb2)
sb:hello
sb2:hello
true
這樣很形象的說明了它們用的都是同一個地址,
該類被設計為在字串緩沖區被單個執行緒使用的地方(作為一般情況)用作StringBuffer替代替代, 在可能的情況下,建議使用這個類別優先于StringBuffer因為它在大多數實施中將更快,但是StringBuilder實體不能安全使用多執行緒, 如果需要同步,那么建議使用StringBuffer ,
一個StringBuilder的主要操作是append和insert方法,它們是多載的,以便接受任何型別的資料,
總結:
String和StringBuilder有哪些區別呢?
1:String的值不可變,StringBuilder的值是可變的,String每賦予一個值,都會產生一個新的地址,而StringBuilder是在原有地址上一直更改的,節省了大量的空間,這也代表了它運行的速度更快,
速度上來說:StringBuilder>String,
2:將 StringBuilder 的實體用于多個執行緒是不安全的,它不像String一樣,在最后會被final修飾不可更改,所以需要這樣的同步,則建議使用 StringBuffer,單獨同步處理則使用StringBuilder,
String:適用于少量的字串操作的情況
StringBuilder:適用于單執行緒下在字符緩沖區進行大量操作的情況
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/384233.html
標籤:java
