Dart關(guān)鍵字final和const

dart官網(wǎng)定義:
final和const
使用過(guò)程中從來(lái)不會(huì)被修改的變量, 可以使用?final?或?const, 而不是?var?或者其他類型, Final 變量的值只能被設(shè)置一次; Const 變量在編譯時(shí)就已經(jīng)固定 (Const 變量 是隱式 Final 的類型.) 最高級(jí) final 變量或類變量在第一次使用時(shí)被初始化。

提示:?實(shí)例變量可以是?final?類型但不能是?const?類型。 必須在構(gòu)造函數(shù)體執(zhí)行之前初始化 final 實(shí)例變量 —— 在變量聲明中,參數(shù)構(gòu)造函數(shù)中或構(gòu)造函數(shù)的初始化列表中進(jìn)行初始化。

理解

這里先多說(shuō)一嘴”編譯時(shí)常量“和”運(yùn)行時(shí)常量“
比如在java中,
public final static String name = ”test“;//編譯時(shí)常量,在聲明變量賦值,并且不依賴運(yùn)行時(shí)的類狀態(tài)
public final static int length = ”test“.length();//運(yùn)行時(shí)常量,依賴運(yùn)行時(shí)的類狀態(tài)

final:只能被設(shè)一次值,在聲明處賦值,值和普通變量的設(shè)值一樣,可以是對(duì)象、字符串、數(shù)字等,用于修飾值的表達(dá)式不變的變量;

final int a = 1;
a = 2;//編譯報(bào)錯(cuò)?The final variable 'a' can only be set once
String name = "aaa";
final int b = 2 * name.length;//編譯成功? 運(yùn)行時(shí)常量

const:只能被設(shè)一次值,在聲明處賦值,且值必須為編譯時(shí)常量;用于修飾常量。

const int a = 1;//編譯成功
const int a = 2 * 3;//編譯成功
String name = "aaa';
const int b = 3 * name.length;//編譯報(bào)錯(cuò)?Const variables must be initialized with a constant value.

const還可以用來(lái)聲明常量值

var a = const[];// const[]創(chuàng)建一個(gè)空數(shù)組,a就是一個(gè)空數(shù)組。是可以再次賦值的
final b = const[];//被final修飾,那么就不能再次被賦值了
const c = const[];//直接是編譯時(shí)常量了
注意:a = [3,3,3]; //編譯成功 運(yùn)行成功

final修飾的基本類型是值不能被修改,但是修飾的是引用類型,比如數(shù)組,集合,map,是可以改變里面的內(nèi)容,const不行

final a = [1];
a[0] = 3;//編譯成功
const b = [3];
b[0] = 4;//編譯成功,運(yùn)行報(bào)錯(cuò)??Unsupported operation: Cannot modify an unmodifiable list

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容