【发布时间】:2021-09-07 07:47:52
【问题描述】:
Dart 空安全表示默认情况下所有原始数据类型(int、String、bool)的变量都是不可为空的,它们不能有空值,对吧?假设如果我有一个 int 类型的变量“a”,那么除非使用带有数据类型的问号,否则我不能为其分配空值。
int a=null;
上面的代码会产生一个错误,比如'值'null'不能分配给'int'类型的变量,因为'int'不可为空。'
但同时,dart 表示所有初始化的变量都有一个默认值 null。我的问题是为什么 statement-1 与 statement-2 不匹配? Dart 不应该允许我们声明一个未初始化的变量,因为未初始化的变量包含空值,它不适用于它自己的语句。有人能解开我的困惑吗?
【问题讨论】:
-
"默认情况下所有原始数据类型的变量..." Dart 没有“原始数据类型”。所有以
?结尾的类型都可以为空,所有不带dynamic的类型都不能为空(dynamic除外,这是特殊的)。 “但与此同时,dart 说所有初始化的变量都有一个默认值 null。”谁说?无论您在哪里阅读,它都可能是从零安全性之前写入的过时信息。这种说法不再正确。 -
同意。它可能应该是“所有un初始化变量”。使用 null 安全性,未初始化的 nullable 变量的默认值为
null。具有潜在不可空类型的未初始化变量只是 未初始化 并且必须在读取之前明确分配(或者如果变量为late则可能仅分配,如果您使用运行时错误在实际初始化之前阅读它)。 -
@jamesdlin 非常感谢您消除了我的困惑,我刚刚再次阅读了 dart 文档,这是我的错误 dart 说Uninitialized variables that have a nullable type have an initial value of null。它适用于可空类型变量,但我认为它是不可为空的。
标签: dart dart-null-safety