如果将变量声明为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进行类型检查。

标签: none

添加新评论