文章目錄
一、概覽
- String是不可變的字符序列;
StringBuffer是線程安全的
,可變的字符序列;- StringBuilder是可變的字符序列。
二、StringBuffer
Java.lang.StringBuffer線程安全的可變字符序列
。一個類似於 String 的字符串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。
三、StringBuilder
java.lang.StringBuilder一個可變的字符序列
是5.0新增的。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字符串緩衝區被單個線程使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因爲在大多數實現中,它比 StringBuffer 要快。兩者的方法基本相同。
四、面試相關
1. String,StringBuffer,StringBuilder的區別?
- A:String是內容不可變的,而StringBuffer,StringBuilder都是內容可變的。
- B:StringBuffer是同步的,數據安全,效率低;StringBuilder是不同步的,數據不安全,效率高
2. StringBuffer和數組的區別?
- 二者都可以看出是一個容器,裝其他的數據。
- 但是呢,
StringBuffer的數據最終是一個字符串數據。
- 而數組( 可以定義類型)可以
放置多種數據,但必須是同一種數據類型的。
3. String和StringBuffer分別作爲參數傳遞
- 基本數據類型的值傳遞,不改變其值
- 引用數據類型的值傳遞,改變其值
- String類雖然是引用數據類型,但是他當作參數傳遞時和基本數據類型是一樣的
package com.heima.stringbuffer;
public class Demo07_StringBuffer {
public static void main(String[] args) {
String s = "heima";
System.out.println(s);
//String這個類一旦被初始化就不會被改變
//change方法調用完之後就彈棧了,hemaiitcast就消失了
//所以打印的s還是heima
change(s);
System.out.println(s);
System.out.println("---------------------");
StringBuffer sb = new StringBuffer();
sb.append("heima");
System.out.println(sb);
change(sb);
System.out.println(sb);
}
public static void change(StringBuffer sb) {
sb.append("itcast");
}
public static void change(String s) {
s += "itcast";
}
}
輸出結果: