相同点
必须初始化(初始化时机可能会不同,看不同点),初始化后都是只读的,不可变
具体看下面例子(声明类型的地方可以与 const 或 final 组合使用)
var a= 1;
const a= 1;
final a = 1;
int a = 1;
const int a = 1;
final int a = 1;
不同点
const表示编译时常量,即在代码还没有运行时我们就知道它声明变量的值是什么;而final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化
const a = 8;
const b = false;
const c = a;
const d = 5 * 3;
final x = new DateTime.now(); // 正确
const x = new DateTime.now(); // 错误
final y = sin(90); // 正确
const y = sin(90); // 错误