字符串普遍應用 在Java 編程中,在 Java 中字符串屬於對象,Java 提供了 String 類來建立和操做字符串。html
須要注意的是,String的值是不可變的,這就致使每次對String的操做均可能生成新的String對象,這樣不只效率低下,並且大量浪費有限的內存空間。java
String操做時內存變化的圖:編程
當對字符串進行修改的時候,須要使用 StringBuffer 和 StringBuilder 類。安全
和 String 類不一樣的是,StringBuffer 和 StringBuilder 類的對象可以被屢次的修改,而且不產生新的未使用對象。多線程
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不一樣在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。ui
因爲 StringBuilder 相較於 StringBuffer 有速度優點,因此多數狀況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的狀況下,則必須使用 StringBuffer 類。.net
String:不可變字符串;線程
StringBuffer:可變字符串、效率低、線程安全;htm
StringBuilder:可變字符序列、效率高、線程不安全;對象
均可以賦空值null,親測不報錯;
均可以經過new的形式建立空對象,此時打印什麼都不輸出(null也不輸出)
(1)若是要操做少許的數據用 String;
(2)多線程操做字符串緩衝區下操做大量數據 StringBuffer;
(3)單線程操做字符串緩衝區下操做大量數據 StringBuilder(推薦使用)。
String | StringBuffer | StringBuilder |
---|---|---|
String的值是不可變的,這就致使每次對String的操做都會生成新的String對象,不只效率低下,並且浪費大量優先的內存空間 | StringBuffer是可變類,和線程安全的字符串操做類,任何對它指向的字符串的操做都不會產生新的對象。每一個StringBuffer對象都有必定的緩衝區容量,當字符串大小沒有超過容量時,不會分配新的容量,當字符串大小超過容量時,會自動增長容量 | 可變類,速度更快 |
不可變 | 可變 | 可變 |
線程安全 | 線程不安全 | |
多線程 操做字符串 | 單線程 操做字符串 |