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-12
Java String.replace()方法"無效"的原因及解決方式
這篇文章主要介紹了Java String.replace()方法"無效"的原因及解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
詳解SpringCloud Gateway 2020.0.2最新版
這篇文章主要介紹了SpringCloud Gateway 2020.0.2最新版,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Spring Security OAuth2 實現(xiàn)登錄互踢的示例代碼
這篇文章主要介紹了Spring Security OAuth2實現(xiàn)登錄互踢的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-04-04
Spring 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

