▩Dart-理解final与const

Posted itzyjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了▩Dart-理解final与const相关的知识,希望对你有一定的参考价值。

final表示单一赋值:final变量或字段必须初始化。 一旦赋值,就不能改变final变量的值。

一个 final 变量只能被设置一次,两者区别在于:const 变量是一个编译时常量final变量在第一次使用时被初始化
(被final或者const修饰的变量,变量类型可以省略。)

通俗的说就是:

  1. final在被使用到的时候才会进行初始化, 如果只是被定义, 而没有被使用到, 那么这个变量一直没有被初始化 (可以理解为’懒加载’)。
  2. const修饰的变量, 一经定义就会在编译期间对其进行初始化。

const可以在创建集合时使用它,例如const [1,2,3] ,以及构造对象(代替new),比如const Point(2, 3)。这里,const对象意味着它整个深度状态可以在编译时完全确定,并且对象将被冻结并[完全不可变]

const对象必须根据可在编译时计算的数据创建它们。 const对象无法访问运行时需要计算的任何内容。
1+2是一个合法的const表达式,但new DateTime.now()不是合法的const表达式。因为const对象是深层不能改变的。

如果你有final修饰的集合,则该集合仍然可变。
如果你有一个const集合,那么它中的所有东西也必须是递归的const。

对于任何给定的const值,无论const表达式被计算多少次,都将创建并[重用]单个const对象。 下面代码清晰阐释了这点:

getConst() => const [1, 2];
getNonConst() => [1, 2];
main() 
  var a1 = getConst();
  var a2 = getConst();
  var b1 = getNonConst();
  var b2 = getNonConst();
  print(a1 == a2);// true
  print(b1 == b2);// false


final与const均表示不可被修改!

  1. 相同点:
    ➀ final、const 必须初始化!
    ➁ final、const 只能赋值一次!
  2. 不同点:
    ➀ final可修饰实例变量、const修饰实例变量必须加static

    ➁ const 修饰的List集合任意索引不可修改,final修饰的可以修改
    ➂ const 用来修饰变量,只能被赋值一次,在编译时赋值
    ➃ final 用来修饰变量,只能被赋值一次,在运行时赋值
    ➄ final 只可用来修饰变量,const 关键字即可修饰变量也可用来修饰常量构造函数(当const修饰类的构造函数时,它要求该类的所有成员都必须是final的。)

以上是关于▩Dart-理解final与const的主要内容,如果未能解决你的问题,请参考以下文章

Dart 中 的var final dynamic const

Dart 基本语法

Dart中的static、final、const【译】

Dart2基础

Dart语言学习 Dart的常量和变量

Dart学习之基础语法