我們在寫程序的時候通常能看到將一個類型定義為final類型,前幾日剛好遇到一些困惑,查看資料后在此做一下摘錄:
理解final最主要的是這句話:定義為final的變量,指的是該變量的 “引用” 不能被再次賦值。
比如:
final int a=1; 這邊定義的int類型a,他其實直接是放在棧里面的,固然不能重新對其賦值。final String str="abc"; 這邊定義了一個String類型str ,這個str指向的是常量池中"abc"的位置,即"abc"的引用,所以我們對其重新賦值的時候,引用會改變,這與final的定義相違背。final int[] arr=new int[5]; 這里我們定義了一個數組,那arr的引用其實是數組大開始地址,當我們再進行arr=new int[3];時,這是不被允許的,因為其引用會改變。當我們對其進行賦值,如:arr[0]=0;arr[1]=1; 這些操作的時候,其引用并沒有改變,所以這是被允許的。
同樣的,我們也可以類推到自定義的類 如:Stu類中有name字段
final Stu stu=new Stu("fzy"); 這時,我們對這個stu的name重新賦值也是沒有問題的, stu.setName("zy");
新聞熱點
疑難解答