1. 程式人生 > >面試題:使用final關鍵字修飾一個變數時,是引用不能變,還是引用的物件不能變?

面試題:使用final關鍵字修飾一個變數時,是引用不能變,還是引用的物件不能變?

/*
 * 問題:使用final關鍵字修飾一個變數時,是引用不能變,還是引用的物件不能變
 * 答:
 * 使用final關鍵字修飾一個變數時,是指引用變數不能變,引用變數所指向的物件中的內容還是可以改變的。
 */
public class Test10 {
	// final修飾基本型別的變數
	public static final char CHAR = '中';
	// final修飾引用型別的變數
	public static final StringBuffer a = new StringBuffer("StringBuffer");

	public static void main(String[] args) {
		// 編譯報錯,引用不能變
		// a = new StringBuffer("hehe");
		// 引用變數所指向的物件中的內容還是可以改變的
		a.append("xxx");

	}

	public static int method1(final int i) {
		// i = i + 1;// 編譯報錯,因為final修飾的是基本型別的變數
		return i;
	}

	// 有人在定義方法的引數(引用變數)時,可能想採用如下的形式來阻止方法內部修改傳進來的引數物件,
	// 實際上,這是辦不到的,在該方法內部任然可以增加如下程式碼來修改引數物件
	public static void method2(final StringBuffer buffer) {
		buffer.append("buffer");// 編譯通過,因為final修飾的是引用型別的變數
	}

}