案例 1
bool _privateBool = false;
final finalBool = _privateBool;
void main() {
_privateBool = true;
print(finalBool); ///==> true
}
变量是否finalBool
保存对的引用_privateBool
,以便当_privateBool
其发生变化时反映到finalBool
。
案例 2
bool _privateBool = false;
final finalBool = _privateBool;
void main() {
print(_privateBool.hashCode);
print(finalBool.hashCode);
_privateBool = true;
print(finalBool); ///==> false
}
在这种情况下,由于上面的2个打印语句(访问这些变量),值没有发生奇怪的变化。
案例 3
bool _privateBool = false;
final finalBool = _privateBool;
void main() {
_privateBool = true;
print(_privateBool.hashCode);
print(finalBool.hashCode);
print(finalBool); ///==> true
}
在这种情况下,即使访问了这些变量,但在分配之后,其值也会改变。
来自 Dart文档中有关变量和默认值的内容:
finalBool
您的观察结果与中延迟初始化的顶级 final 变量一致main
。首次使用(访问)时,finalBool
将使用 的当前值进行初始化_privateBool
。初始化之后,
finalBool
不可重新分配且后续的改变对_privateBool
没有任何影响finalBool
。