const和final定义的都是常量,值不能改变 ,并且在声明的时候就必须初始化
如果您从未打算更改一个变量,那么使用 final 或 const,不是var,也不是一个类型。一个 final 变量只能被初始化一次; const变量是一个编译时常量,(Const变量是隐式的final),final的顶级或类变量在第一次使用时被初始化。被final或者const修饰的变量,变量类型可以省略,建议指定数据类型。被 final 或 const 修饰的变量无法再去修改其值。flnal 或者 const 不能和 var 同时使用,常量如果是类级别的,请使用 static const

差别:
const定义的是编译时常量,只能用编译时常量来初始化,const关键字不只是声明常数变量,您也可以使用它来创建常量值,以及声明创建常量值的构造函数,任何变量都可以有一个常量值。
final定义的常量可以用变量来初始化,被final修饰的顶级变量或类变量在第一次声明的时候就需要初始化
final time = new DateTime.now();//Ok
const time = new DateTime.now();//Error,new DateTime.now()不是编译时常量const常量
var、final等在左边定义变量的时候,并不关心右边是不是常量
但是如果右边用了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
在常量表达式中,该运算符的操作数必须为'bool'、'num'、'String'或'null', const常量必须用conat类型的值初始化。
网友评论