面試題:使用final關鍵字修飾一個變數時,是引用不能變,還是引用的物件不能變?
阿新 • • 發佈:2019-01-25
/* * 問題:使用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修飾的是引用型別的變數 } }