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