java final本質(zhì)詳解
含義:final 含義是【僅可以被賦值一次】。
賦值位置:在【聲明時賦值】、在【構(gòu)造方法中賦值】
舉例:
package com.dada.data; public class TestFinal { // 1.聲明時賦值 private final int i = 0; private final int j; public TestF() { // 2.構(gòu)造方法中賦值 j = 10; } }
注意:我們說 final 是僅可以賦值一次沒錯,但是我們知道在 java 中【值有兩種】,【基本數(shù)據(jù)類型的值】和【引用數(shù)據(jù)類型的值】,對于基本數(shù)據(jù)類型來說,賦值就是直接把【值賦給變量】,對于引用數(shù)據(jù)類型來說就是把【引用賦給變量】。
因此:僅可以賦值一次的含義也就分為兩種情況了,1.如果是基本數(shù)據(jù)類型,那么就是值本身不能變;2.如果是引用數(shù)據(jù)類型的值,那就是引用不能變,但是被引用的內(nèi)容是可以變的。
舉例:
定義 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()); // 修改引用所對應(yīng)的對象的內(nèi)容 student.setId(2); student.setName("hehe"); student.setScore(10); System.out.println(ss.toString()); } }
輸出結(jié)果:
id: 1 name:dada score:3 id: 2 name:hehe score:10
總結(jié):
由上面的例子可以知道,變量被 final 修飾之后其引用的內(nèi)容還是可以被修改的,之所以很多時候我們感覺它不能被修改是因為:
1.通常我們是在定義變量時進行的賦值,這個時候?qū)τ诨绢愋蛿?shù)據(jù)來說它是永遠不能改變的。
2.對于引用類型數(shù)據(jù)來說,因為我們無法獲取對應(yīng)的引用,所以也會覺得引用類型數(shù)據(jù)也是不能被修改的。
以上就是java final本質(zhì)解釋的詳細內(nèi)容,更多請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
maven+阿里云創(chuàng)建國內(nèi)鏡像的中央倉庫(親測可用)
本篇文章主要介紹了maven+阿里云創(chuàng)建國內(nèi)鏡像的中央倉庫(親測可用),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12Java String.replace()方法"無效"的原因及解決方式
這篇文章主要介紹了Java String.replace()方法"無效"的原因及解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08詳解SpringCloud Gateway 2020.0.2最新版
這篇文章主要介紹了SpringCloud Gateway 2020.0.2最新版,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Spring Security OAuth2 實現(xiàn)登錄互踢的示例代碼
這篇文章主要介紹了Spring Security OAuth2實現(xiàn)登錄互踢的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Spring Task定時任務(wù)每天零點執(zhí)行一次的操作
這篇文章主要介紹了Spring Task定時任務(wù)每天零點執(zhí)行一次的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09使用Java的Spring框架編寫第一個程序Hellow world
這篇文章主要介紹了Java的Spring框架并用其開始編寫第一個程序Hellow world的方法,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12