2、dart 语言学习 常量

79 阅读2分钟

本节目标

  • 常量的定义方式
  • 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会引用同一份值

  1. 如果使用 const 修饰类中的变量,则必须加上 static 关键字

相同点

1.声明时必须要赋值,

2.只能在初始化赋值一次,之后不能重新赋值

3.后面都不能接var关键字

4.类型声明可以忽略