StringBuffer的使用陷阱

我們知道StingBuffer可以構建一個字符串,比如說,我們這樣來構建一個字符串,StringBuffer buffer = new StringBuffer(" M "); 這個顯然定義了一個StringBuffer的對象,並其初始值爲“ M ” ,但是我們來看看下面我們寫的這個語句 StringBuffer buffer = new  StringBuffer(' M ');注意:這個括號裏面的是單引號。那麼它得到結果有什麼變化嗎?當然有啦。我們可以輸出buffer看看,我們輸出的結果爲空。這怎麼可能呢???不是裏面有一個字符嗎?但是程序不會騙人的。我們看看StringBuffer的API文檔,就知道了,原來我們在API中Stringbuffer的構造函數中沒有參數的是char型的,但是在API中可以看到有參數爲int型的構造函數,那我們就知道了,原來上面的那句代碼是將‘M’轉化爲int值後來進行構造的,表示初始化構造一個大小爲‘M’=77的容量。這也就是我們打印出來沒有東西的原因了。

我們來看下面的代碼來說明這個問題。

package test23;

public class StringBuffer_Test {
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer('M');
		sb.append('a');
		sb.append('i');
		sb.append('n');
		//輸出的是ain,
		//因爲在第一個建立對象的時候是調用的是new StringBuffer(int )構造函數,構造一個初始容量爲77('M'轉化爲int值爲77)
		//然後在將後面的char型追加到StringBuffer對象後面,所以輸出的爲 "ain"
		System.out.println(sb.toString());
	}
}

大家在使用StringBuffer的時候一定要注意雙引號與單引號的區別,可以避免很多的錯誤

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