例如:
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.length
和list.clear()
,甚至称呼list.length
和list.length = 5
都没有语法上的区别。dart编译器无法区分这是否是一个变异的调用。
所以标记为final
只会保护它不被重赋值。在您的示例中,list变量永远不能被分配到另一个列表。它可以被操作来保存不同的值,但它将始终是同一个实例。