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;
}
}
注意:我們說(shuō) final 是僅可以賦值一次沒(méi)錯(cuò),但是我們知道在 java 中【值有兩種】,【基本數(shù)據(jù)類型的值】和【引用數(shù)據(jù)類型的值】,對(duì)于基本數(shù)據(jù)類型來(lái)說(shuō),賦值就是直接把【值賦給變量】,對(duì)于引用數(shù)據(jù)類型來(lái)說(shuō)就是把【引用賦給變量】。
因此:僅可以賦值一次的含義也就分為兩種情況了,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;
}
}
定義測(cè)試類:
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í)候我們感覺(jué)它不能被修改是因?yàn)椋?/p>
1.通常我們是在定義變量時(shí)進(jìn)行的賦值,這個(gè)時(shí)候?qū)τ诨绢愋蛿?shù)據(jù)來(lái)說(shuō)它是永遠(yuǎn)不能改變的。
2.對(duì)于引用類型數(shù)據(jù)來(lái)說(shuō),因?yàn)槲覀儫o(wú)法獲取對(duì)應(yīng)的引用,所以也會(huì)覺(jué)得引用類型數(shù)據(jù)也是不能被修改的。
以上就是java final本質(zhì)解釋的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中LinkedHashSet的實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Java中LinkedHasSet的實(shí)現(xiàn)原理詳解,LinkedHashSet?是具有可預(yù)知迭代順序的?Set?接口的哈希表和鏈接列表實(shí)現(xiàn),此實(shí)現(xiàn)與HashSet?的不同之處在于,后者維護(hù)著一個(gè)運(yùn)行于所有條目的雙重鏈接列表,需要的朋友可以參考下2023-09-09
解決引入spring-cloud-starter-openfeign后部分類找不到的問(wèn)題
這篇文章主要介紹了解決引入spring-cloud-starter-openfeign后部分類找不到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
使用Spring掃描Mybatis的mapper接口的三種配置
這篇文章主要介紹了使用Spring掃描Mybatis的mapper接口的三種配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
java接入創(chuàng)藍(lán)253短信驗(yàn)證碼的實(shí)例講解
下面小編就為大家分享一篇java接入創(chuàng)藍(lán)253短信驗(yàn)證碼的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
基于Java實(shí)現(xiàn)修改圖片分辨率示例代碼
這篇文章主要介紹了一個(gè)可以修改圖片分辨率的java工具類,文中的示例代碼講解詳細(xì),對(duì)學(xué)習(xí)JAVA有一定的幫助,感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)吧2021-12-12
Springboot整合第三方登錄功能的實(shí)現(xiàn)示例
本文主要介紹了Springboot整合第三方登錄功能的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
18個(gè)Java8日期處理的實(shí)踐(太有用了)
這篇文章主要介紹了18個(gè)Java8日期處理的實(shí)踐(太有用了),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

