final 是 Java 中常見的關鍵字,用於修飾類、方法、變數。本文從變數層面切入,透過代碼示例說明其對基本類型、String 以及物件引用的影響。
package zy.pro.jbd.demo;
public class FinalDemo {
final int numInt1 = 16;
final String str = "zy";
final String str1; // 空白 final,必須在建構子初始化
public FinalDemo() {
str1 = "zy";
}
private void testFinalInt() {
// numInt1 += 1; // 編譯錯誤:cannot assign a value to final variable
System.out.println(numInt1);
}
private void testFinalString() {
// str = str + "aaaaa"; // 編譯錯誤
System.out.println(str);
}
}
嘗試修改 numInt1 或 str 皆會導致編譯錯誤,確認 final 基本類型與 String 值不可變。
// 測試類 A
package zy.pro.jbd.testbase;
public class A {
int t = 10;
public void setT(int t) { this.t = t; }
public int getT() { return t; }
}
// 在 FinalDemo 中
final A a = new A();
public void testFinalObject() {
a.setT(29); // 允許修改物件內部狀態
System.out.println("t: " + a.getT()); // 輸出 t: 29
}
結果顯示 a 參考指向的物件內部屬性 t 可被修改,但若嘗試 a = new A(); 則編譯失敗。
final 變數必須初始化(宣告時或建構子中)。String:值不可變。本文來自編程入門網:原文連結