const和final定義的都是常量阵难,值不能改變 舅列,并且在聲明的時(shí)候就必須初始化
如果您從未打算更改一個(gè)變量,那么使用 final 或 const声滥,不是var眉撵,也不是一個(gè)類(lèi)型。一個(gè) final 變量只能被初始化一次; const變量是一個(gè)編譯時(shí)常量落塑,(Const變量是隱式的final)纽疟,final的頂級(jí)或類(lèi)變量在第一次使用時(shí)被初始化。被final或者const修飾的變量憾赁,變量類(lèi)型可以省略污朽,建議指定數(shù)據(jù)類(lèi)型。被 final 或 const 修飾的變量無(wú)法再去修改其值龙考。flnal 或者 const 不能和 var 同時(shí)使用蟆肆,常量如果是類(lèi)級(jí)別的,請(qǐng)使用 static const
差別:
const定義的是編譯時(shí)常量晦款,只能用編譯時(shí)常量來(lái)初始化炎功,const關(guān)鍵字不只是聲明常數(shù)變量,您也可以使用它來(lái)創(chuàng)建常量值缓溅,以及聲明創(chuàng)建常量值的構(gòu)造函數(shù)蛇损,任何變量都可以有一個(gè)常量值。
final定義的常量可以用變量來(lái)初始化坛怪,被final修飾的頂級(jí)變量或類(lèi)變量在第一次聲明的時(shí)候就需要初始化
final time = new DateTime.now();//Ok
const time = new DateTime.now();//Error淤齐,new DateTime.now()不是編譯時(shí)常量const常量
var、final等在左邊定義變量的時(shí)候袜匿,并不關(guān)心右邊是不是常量
但是如果右邊用了const更啄,那么不管左邊如何,右邊都必須是常量
const list = const[1,2,3];//Ok
const list =[1,2,3];//Error
final list =[1,2,3];//Ok
final list = const[1,2,3];//Ok
在常量表達(dá)式中沉帮,該運(yùn)算符的操作數(shù)必須為'bool'锈死、'num'、'String'或'null', const常量必須用conat類(lèi)型的值初始化穆壕。