Dart var 和 dynamic 的区别
如果将变量声明为dynamic
,则其类型会随着时间变化:
dynamic a ='abc'; //最初是一个字符串
a = 123; //然后给它分配一个int值
a = true; //最后给它分配一个布尔值
如果将变量声明为var
,则一旦分配具体的变量则类型就无法更改:
var b ='abc'; // b是一个字符串,其类型不能更改
b = 123; // 此行代码将无法编译,无法将int分配给字符串变量
但是,如果声明一个var
而不进行初始化,那么它将变为动态的:
var a; // 这实际上是一个动态类型
a = 123; //为其分配一个整数
a ='abc'; //为其分配一个字符串
print(a); //打印出abc
小结:
var
实际是编译器抛出的语法糖,一旦被编译,编译器就会自动匹配var
变量的实际类型,并用实际类型替换该变量的声明,等同于我们在编码时使用了实际类型声明。而dynamic
被编译成Object
类型,编译器编译时不会对dynamic
进行类型检查。