Dart中的const 和 final 都可以用来定义一个不可变的常量,但又有一些不一样的区别。
使用const 定义的常量是需要在编译阶段即可确定的值,而这个值一旦确定就不能再变化,否则会报错。
比如一般我们会这么用
const int age = 23;
//会在编译阶段确定 num 的值是 50 且不可再变;
const int num = 22 + 28;
当时如果我们使用 const 去定义一个时间戳,那就会报错
// 报错 因为在编译阶段 无法 访问运行时的内容, 而 DateTime对象只有在代码运行时方可访问的到
const int timeStamp = new DateTime.now();
再比如 我们需要生成一个随机数的场景
// import 'dart:math'; 需要引入 math 模块
// 报错,错误原因同上
const _random = new Random();
这个时候就需要使用 final 关键字来定义
final timeStamp = new DateTime.now();
final _random = new Random();
print(timeStamp);
print(_random.nextDouble());
或者还有个实际用到的项目场景,在做开发过程中,我们一般要通过网络请求获取业务数据,在编辑阶段网络请求的返回数据是完全不知道的,所以在这个时候使用const 是不行的,应该使用 final 关键字。