一、共同点
都是常量,一但赋值就不可修改。
二、不同点
const:编译时常量,其值在编译时就能确定。
final:运行时常量,其值在程序运行时才能确定。
三、什么是编译时常量
- 其值在编译时就能确定。
- 无需重复创建实例,在内存中只有一份。
对等 Java 中的写法:
// Java 写法:
public class MyClass {
public static final int TYPE = 1;
}
// Dart 写法:
public class MyClass {
static const int TYPE = 1;
}
三、示例
class Point {
final num x, y;
const Point(this.x, this.y);
}
main() {
var p1 = const Point(0, 0);
var p2 = const Point(0, 0);
print(p1 == p2);
print(p1 === p2);
}
输出结果:
true
true
四、补充
- 声明类成员变量时,const 变量必须同时被声明为 static 的。
- const 变量只能在定义的时候初始化。
- final 变量可以在构造函数参数列表或者初始化列表中初始化。
- 在文件中,变量不能声明为 static。