type
status
date
slug
summary
tags
category
icon
password
<ins/>
在 Dart 中,finalconst 都用于定义不可变的变量,但它们在使用场景和不可变的特性上有所不同。

1. final

  • 定义后不可变final 变量在定义后只能被赋值一次,但赋值本身可以是延迟的。final 变量的值在运行时确定。
  • 运行时初始化final 变量可以在运行时赋值。只要在赋值之后不再更改其值即可。
  • 适用于单次初始化的变量:通常用于那些不需要在编译时就确定值的变量,例如依赖运行时计算或从外部获取的数据。

示例

在上面的例子中,currentTimeage 的值是在运行时决定的,并且在赋值后就不可更改。

2. const

  • 编译时常量const 变量必须在编译时就确定其值,也就是说,const 变量的值在编译时就固定下来。
  • 不可变对象const 变量不仅自身是不可变的,其引用的对象也是不可变的。
  • 更高的性能:由于 const 变量在编译时就确定了值,它们通常会被 Dart 直接内联到代码中,从而提高性能。
  • 常量构造函数const 可以用于创建编译时的常量对象,使用 const 构造函数来生成不可变的对象实例。

示例

在上面的例子中,maxItemspipoint 的值在编译时已经确定下来,且不可变。

finalconst 的主要区别

特性
final
const
初始化时间
运行时确定
编译时确定
可变性
定义后不可变,但在运行时初始化
定义后不可变,且必须在编译时初始化
是否完全不可变
对象本身可变,引用不可变
对象和引用都不可变
适用场景
需要延迟初始化的不可变变量,运行时确定的值
编译时可确定的值和需要完全不可变的对象

总结

  • final:适用于那些不需要在编译时就确定的不可变变量。它可以在运行时赋值,并且只能被赋值一次。
  • const:用于那些在编译时就可以确定的不可变变量和完全不可变的对象。
<ins/>