final關鍵字的含義

許多編程語言都有一種方法,告知編譯器某一個數據是恆定不變的,且不能被修改。在java中,達到這一目的正是final關鍵字。被final關鍵字修飾的類,變量,方法意爲“這是不可改變的”。不過,用final修飾基本數據類型和對象,其含義是有所差別的。

具體說來,如果用final修飾基本類型,指的是這一基本類型的數值不可改變,對於基本類型來說,其變量存的就是數值本身,final要求它這個數值一旦初始化了就不能修改。而如果final修飾的是對象類型,則表示的是引用不能被修改,而引用所指向的對象是可以修改的。由於java中的引用正是c語言當中的指針,存放的正是對象的存儲地址,所以final對於引用類型的含義恰是引用變量所存放的存儲地址不能修改,意爲引用不能指向別的對象,而對象本身仍然還是修改。

舉例:

class Dog() {

final int a = 1;

final User user = new User(“張三”);

}

public class MainTest() {

   public static void main(String[] args) {

     Dog d = new Dog();

     d.a = 2; //編譯不通過

     d.user = new User(“李四”); //編譯不通過

     d.setName(“王五”); //編譯通過

}

}

d.user = new User(“李四”); 這行代碼意圖修改引用的值,所以不被允許;

d.setName(“王五”); 這行代碼修改的是對象本身,引用保持不變,所以允許。

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