Dart 中的 'const' 关键字放置有何不同?

What's different about 'const' keyword placement in Dart?

void main() {
  var list1 = const [1, 2, 3];
  const list2 = [1, 2, 3];
}

list1和list2有区别吗?

'const' Dart 中的关键字放置有何不同?

const as 关键字使您的对象 constant 之后您无法为其重新分配任何值。

Const means that the object's entire deep state can be determined entirely at compile-time and that the object will be frozen and completely immutable.

在你的例子中

list1 = []; // perfectly fine
list2 = []; // but this throw errors (Error: Can't assign to the const variable 'list2'.)

另一方面,var 允许您为变量重新赋值。

但是,值后的const使得值unmodifiable我们来看一个例子

list1.add(22); // ERROR! Cannot add to an unmodifiable list
// but you still can reassign the value 
list1 = [];
// while the 
list2 = []; // throw errors as I said above!

const 关键字变量中值的 const 被隐藏。

const list2 = const [1,2,3];
list2.add(22); // ERROR! Cannot add to an unmodifiable list

简而言之:一个使分配的内存不可变,另一个相同,还有指向它的指针。在这两种情况下,列表(对象)都是不可变的。

我希望这可以帮助您理解其中的区别。

阅读有关 dart.dev/language-tour#final-and-const

的官方文档的更多信息