bool _privateBool = false;
final finalBool = _privateBool;
void main() {
_privateBool = true;
print(finalBool); ///==> true
}
变量
finalBool
是否保留对_privateBool
的引用,因此当_privateBool
更改时,它会反映到finalBool
。
bool _privateBool = false;
final finalBool = _privateBool;
void main() {
print(_privateBool.hashCode);
print(finalBool.hashCode);
_privateBool = true;
print(finalBool); ///==> false
}
在这种情况下,由于上面的 2 个打印语句(访问这些变量),该值没有发生奇怪的变化。
bool _privateBool = false;
final finalBool = _privateBool;
void main() {
_privateBool = true;
print(_privateBool.hashCode);
print(finalBool.hashCode);
print(finalBool); ///==> true
}
在这种情况下,即使这些变量被访问但在分配之后,值也会发生变化。
来自 Dart docs 关于变量和默认值的信息:
顶级变量和类变量是延迟初始化的;初始化代码在第一次使用变量时运行。
您的观察结果与首次使用(访问)当前值
finalBool
时在 main
中初始化的最终变量 _privateBool
一致。
初始化后
finalBool
变量不能重新赋值并且
对 _privateBool
的后续更改对 finalBool
没有影响。