最终变量从引用中更改

问题描述 投票:0回答:1

案例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
1个回答
0
投票

来自 Dart docs 关于变量和默认值的信息:

顶级变量和类变量是延迟初始化的;初始化代码在第一次使用变量时运行。

您的观察结果与首次使用(访问)当前值

finalBool
时在
main
中初始化的最终变量
_privateBool
一致。

初始化后

finalBool
变量不能重新赋值并且 对
_privateBool
的后续更改对
finalBool
没有影响。

© www.soinside.com 2019 - 2024. All rights reserved.