为什么我们可以在 dart 中的索引处更改最终列表的值,但不能更改其他类型的最终变量?



例如:

final String name = "john";
name = "patrick" //error: the final variable name can only be set once

但是我们可以在索引

处改变值
final List<String> listOfNames = ["bob", "steve", "john"];
liftOfNames[2] = "patrick"; //this is allowed
listOfNames = ["jhonny", "jim", "jack"]; //this isn't allowed(reassigning)

所以不允许重新分配final变量,但允许在索引处更改final列表的值?

是。完全正确。没有选项(在Dart中,像c++这样的语言可以这样做)将方法标记为是否更改实例。所以称呼list.lengthlist.clear(),甚至称呼list.lengthlist.length = 5都没有语法上的区别。dart编译器无法区分这是否是一个变异的调用。

所以标记为final只会保护它不被重赋值。在您的示例中,list变量永远不能被分配到另一个列表。它可以被操作来保存不同的值,但它将始终是同一个实例。

最新更新