▩Dart-理解final与const
Posted itzyjr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了▩Dart-理解final与const相关的知识,希望对你有一定的参考价值。
final
表示单一赋值:final变量或字段必须初始化。 一旦赋值,就不能改变final变量的值。
一个 final 变量只能被设置一次,两者区别在于:const 变量是一个编译时常量;final变量在第一次使用时被初始化。
(被final或者const修饰的变量,变量类型可以省略。)
通俗的说就是:
final
在被使用到的时候才会进行初始化, 如果只是被定义, 而没有被使用到, 那么这个变量一直没有被初始化 (可以理解为’懒加载’)。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均表示不可被修改!
- 相同点:
➀ final、const 必须初始化!
➁ final、const 只能赋值一次! - 不同点:
➀ final可修饰实例变量、const修饰实例变量必须加static
➁ const 修饰的List集合任意索引不可修改,final修饰的可以修改
➂ const 用来修饰变量,只能被赋值一次,在编译时赋值
➃ final 用来修饰变量,只能被赋值一次,在运行时赋值
➄ final 只可用来修饰变量,const 关键字即可修饰变量也可用来修饰常量构造函数(当const修饰类的构造函数时,它要求该类的所有成员都必须是final的。)
以上是关于▩Dart-理解final与const的主要内容,如果未能解决你的问题,请参考以下文章