Java String 類——String字符串常量
字符串廣泛應用 在Java 編程中,在 Java 中字符串屬於對象,Java 提供了 String 類來創建和操作字符串。需要注意的是,String的值是不可變的,這就導致每次對String的操作都會生成新的String對象,這樣不僅效率低下,而且大量浪費有限的內存空間。我們來看一下這張對String操作時內存變化的圖:
StringBuffer 和 StringBuilder 類——StringBuffer、StringBuilder字符串變量
當對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。
和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,並且不產生新的未使用對象。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。
由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的情況下,則必須使用 StringBuffer 類。
三者的繼承結構
三者的區別:
(1)字符修改上的區別(主要)
String:不可變字符串;
StringBuffer:可變字符串、效率低、線程安全;
StringBuilder:可變字符序列、效率高、線程不安全;
小結:
(1)如果要操作少量的數據用 String;
(2)多線程操作字符串緩衝區下操作大量數據 StringBuffer;
(3)單線程操作字符串緩衝區下操作大量數據 StringBuilder(推薦使用)
String | StringBuffer | StringBuilder |
String的值是不可變的,這就導致每次對String的操作都會生成新的String對象,不僅效率低下,而且浪費大量優先的內存空間 | StringBuffer是可變類,和線程安全的字符串操作類,任何對它指向的字符串的操作都不會產生新的對象。 | 每個StringBuffer對象都有一定的緩衝區容量,當字符串大小沒有超過容量時,不會分配新的容量,當字符串大小超過容量時,會自動增加容量 可變類,速度更快 |
不可變 | 可變 | 可變 |
線程安全 | 線程不安全 | |
多線程操作字符串 | 單線程操作字符串 |