String, StringBuffer, StringBuilder比較

一、概覽

  1. String是不可變的字符序列;
  2. StringBuffer是線程安全的,可變的字符序列;
  3. 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";
	}
}

輸出結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章