Flutter 中 Const,Static,Final 的区别

核心: static 修饰 members , final 修饰 variables , const 修饰 value

static
static 意味着成员是类变量,而不是实例变量。仅此而已,没有其他任何用图。static 修饰 成员(members)

final
final 意味着单次赋值:一个 final 修饰的 变量或 字段 必须 具有初始化赋值。一旦赋值,final 的变量就不能改变。 final 修饰 变量(variables)

const
const 的含义在 Dart 中有一些复杂和微妙。const 修饰 value。 你可以用它创建于集合,例如 const [1,2,3],也可以构建一个类的实例,例如 const Point(2,3)。const 意味着这些对象的所有状态都在编译期就确定了,另外这个对象将会被冻结并且完全不可改变。

Const 对象有一些有趣的属性和限制:

  • 它们必须由编译期就能被计算出来的数据创建。一个 const 的对象不能使用运行时才能确定的值。1+2 是一个合法的 const
    表达式,但是 new DateTime.now() 就是不合法的。
  • 它们是深入的,传递性的不可改变。如果你有一个 final 的集合字段,集合里面的内容是可以改变的。如果你有一个 const
    的集合对象,集合里面的一切都是 const 的,都是不能改变的。
  • 它们是规范化的,这点有些像字符串:对于一个 const 的 value,无论这个 value
    被创建或者使用多少次,都是相同的。举例如下:
getConst() => cosnt[1,2];
main(){
  var a = getConst();
  var b = getConst();
  print(a===b); // true
}

结语

final
第一:如果你在运行时才能获得的值,那么用 final 进行修饰。比如 http 请求结果,数据库请求结果。
第二:final 修饰的对象,只要这个对象的字段不是final或const。那么他们是可以再次被赋值的。

const:
第一:编译期就能确定的值,那么用 final修饰。
第二:如果你有一个 const 的对象,那么 const 对象里面的(字段)一切都是 const。不能再次进行赋值。

你可能感兴趣的:(Flutter,flutter)