本节目标
- 常量的定义方式
- final const 的区别
概念
如果不想更改一个变量,可以使用关键字 final 或者 const 修饰变量,这两个关键字可以替代 var 关键字或者加在一个具体的类型前。一个 final 变量只可以被赋值一次;一个 const 变量是一个编译时常量(const 变量同时也是 final 的)。顶层的 final 变量或者类的 final 变量在其第一次使用的时候被初始化。
定义
类型声明可以省略
final String a = 'ducafecat';
final a = 'ducafecat';
const String a = 'ducafecat';
const a = 'ducafecat';
初始后不能再赋值
final a = 'ducafecat';
a = 'abc';
const a = 'ducafecat';
a = 'abc';
不能和 var 同时使用
final var a = 'ducafecat';
const var a = 'ducafecat';
const 赋值 申明可省略
const List ls = const [11, 22, 33];
const List ls = [11, 22, 33];
区别
需要确定的值
“final”表示单赋值:final 变量或字段必须具有初始值设定项。一旦赋值,最终变量的值就无法更改。最终修改变量。
final dt = DateTime.now();
const dt = const DateTime.now();
不可变性可传递
final List ls = [11, 22, 33];
ls[1] = 44;
const List ls = [11, 22, 33];
ls[1] = 44;
内存中重复创建
final a1 = [11 , 22];
final a2 = [11 , 22];
print(identical(a1, a2));
const a1 = [11 , 22];
const a2 = [11 , 22];
print(identical(a1, a2));
总结
不同点
1.final变量的初始值可以在编译时确定,也可以在运行时确定,cosnt变量的初始值只能是编译时确定的值,比如当前时间
2.const变量的不可变性是嵌套的,final不是
3.内存中的创建,相同的值,final变量会重复创建,const会引用同一份值
- 如果使用 const 修饰类中的变量,则必须加上 static 关键字
相同点
1.声明时必须要赋值,
2.只能在初始化赋值一次,之后不能重新赋值
3.后面都不能接var关键字
4.类型声明可以忽略