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

列表1和列表2之间有什么区别吗?

Dart中"const"关键字的位置有什么不同?

  • 在列表文字前的"const"和变量名前的"const"之间

推荐答案

const as关键字会使您的对象变成constant,您以后无法为其重新分配任何值.

Const意味着对象的整个深层状态可以在编译时完全确定,并且对象将被冻结且完全不可变.

在你的例子中

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相关问答推荐

dart中如何从xpath获取属性值?

如何判断一个数字是否是dart中另一个数字的倍数?

在 Flutter 中将 Widget 放在 ListView 之上

Flutter:是否可以有多个 Futurebuilder 或一个 Futurebuilder 用于多个 Future 方法?

Dart 1.8 中的异步/等待功能

Flutter - 在 null 上调用了 getter 'length'

在dart polymer重复模板中获取索引

如何将圆形边框设置为flutter上的MaterialButton?

flutter命令运行失败

Flutter-创建value和name数组

Flutter web url 导航

判断无状态小部件是否在Flatter中处理

Package:flutter/src/widgets/overlay.dart':Failed assertion: line 133 pos 12: "_overlay != null"

判断Dart中是否提供了可选参数

如何在 Dart 中获取当前脚本的目录?

如何在Dart中测试流

如何在 Dart 中替换字符串中间的空格?

Dart 是否有断点语句?

如何初始化构造函数主体中的最终字段?

Dart 中的外部是什么意思?