標籤:
在Java中,final關鍵字可以用來修飾類、方法和變數(包括成員變數和局部變數)。
- 當用final修飾一個類時,表明這個類不能被繼承。
- 對於一個final變數,如果是基礎資料型別 (Elementary Data Type)的變數,則其數值一旦在初始化之後便不能更改;如果是參考型別的變數,則在對其初始化之後便不能再讓其指向另一個對象。
- final修飾的成員變數,必須在定義時或者建構函式中初始化賦值,而且一旦賦值則不能改變。
- 當一個變數被定義成final 類型時,在編譯時間能知道其確切的值,則被當成常量使用。
final String a = "hello";String b = "hello";String c = "helloworld";String d = a + "world";String e = b + "world";System.out.println(c == d);System.out.println(c == e);
輸出結果:
true
false
5. final 修飾的對象內容可變,但是對象是不可變的。如:
final MyClass myClass = new MyClass();
myClass.i = myClass.i + 3;
System.out.println(++myClass.i);
輸出結果:
4
但是如果重新給myClass賦值則會編譯錯誤。
myClass = new MyClass();
6. 對於方法參數是final類型的
public void testString(final String str){ str += "333"; }//編譯產生錯誤,不可重新賦值 public void testStringBuilder(final StringBuilder str){ str.append("333");}//可順利編譯執行,並輸出333
總結一下。我認為final所不能改變的只是引用的,而不是引用的內容。當final修飾的變數的引用地址沒有發生改變而只是值的改變則是可以的。
Java之final的解析