意思:final 意義是【只可以被賦值一次】。
賦值位置:在【宣告時賦值】、在【建構方法中賦值】
範例:
package com.dada.data; public class TestFinal { // 1.声明时赋值 private final int i = 0; private final int j; public TestF() { // 2.构造方法中赋值 j = 10; } }
注意:我們說final 是僅可以賦值一次沒錯,但是我們知道在java 中【值有兩種】,【基本資料型別的值】和【引用資料型別的值】,對基本資料型別來說,賦值就是直接把【值賦給變數】,對於引用資料型別來說就是把【引用賦給變數】。
因此:僅可以賦值一次的意義也就分為兩種情況了,1.如果是基本資料型,那麼就是值本身不能變;2.如果是引用資料型別的值,那就是引用不能變,但是被引用的內容是可以變的。
範例:
定義Student 類別:
package com.dada.data; public class Student { private int id; private String name; private int score; public Student(int id, String name, int score) { this.id = id; this.name = name; this.score = score; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } @Override public String toString() { return "id: " + id + "\t name:" + name + "\tscore:" + score; } }
定義測試類別:
#package com.dada.data; public class TestFinal { private final Student ss; public static void main(String[] args) { TestFinal tf = new TestFinal(); } public TestFinal() { Student student = new Student(1, "dada", 3); // 第一次赋值 ss = student; System.out.println(ss.toString()); // 修改引用所对应的对象的内容 student.setId(2); student.setName("hehe"); student.setScore(10); System.out.println(ss.toString()); } }
輸出結果:
id: 1 name:dada score:3 id: 2 name:hehe score:10
總結:
由上面的例子可以知道,變數被final 修飾之後其引用的內容還是可以被修改的,之所以很多時候我們感覺它不能被修改是因為:
1.通常我們是在定義變數時進行的賦值,這個時候對於基本型別資料來說它是永遠不能改變的。
2.對於引用型別資料來說,因為我們無法取得對應的引用,所以也會覺得引用型別資料也是不能被修改的。
以上是java final本質解釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!