在Dart中所有未初始化的变量默认值均为null。
变量:
var:
var声明的变量可以是任何数据类型,动态指定。
var变量一旦赋值,类型便会确定,则不能再改变其类型。
var变量编译时需要确定变量类型。
dynamic:
dynamic声明的变量可以是任何数据类型,动态指定。
dynamic声明的变量可以在后期改变赋值类型。
dynamic变量运行时需要检查变量类型
Object:
Object 是Dart所有对象的根基类,也就是说所有类型都是Object的子类(包括Function和Null),所以任何类型的数据都可以赋值给Object声明的对象。
常量:
final:
变量类型可以省略
使用final声明的变量,它只能赋值一次,赋值可以是常量也可以是变量。
final修饰的是一个最终的变量,不能再次赋值,否则会报错。也可以先声明再次赋值,但是只能赋值一次。
运行时常量;
const:
变量类型可以省略
const修饰常量,声明的时候就得赋值,只能赋值一次,赋值必须是常量。
不能修改,不能再次赋值。
编译时常量,必须定义的时候初始化;
区别:
可以把const 常量赋给 final 变量,反过来不可以。
const 变量 是隐式 final 的类型.
题外:
late:
显式声明一个非空的变量,但可以不初始化。
空安全:
定义变量时我们可以指定变量是可空还是不可空;
Dart空安全支持基于以下三条核心原则
默认不可空:除非您把变量显式生命为可空,否则它一定是非空类型;
渐进迁移:您可以自由地选择何时进行迁移,多少代码会进行迁移;
完全可靠:Dart的空安全是非常可靠的,意味着编译期间包含了很多优化;
! 空值断言操作符
? 表示变量是可空类型
?. 左边如果为空返回 null,否则返回右边的值,该运算符常用于防止空异常
?? 左边如果为空返回右边的值,否则不处理,该运算符常用于设置默认值
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。