1,var
当使用var声明并定义变量时.如:
var a ="str";
a =1;
此时当编写 a = 1;时,提示错误,是因为使用var变量一旦赋值类型便会确定不能更改。
而我们在编码时发现,当如下时,却不回报错。
var a;
a ="str";
a =1;
为什么呢?
这是因为var声明变量的同时未进行初始化,此变量的类型会被推断为dynamic动态类型。
2,dynamic
在运行时由系统根据该变量的 赋值 自动 推断该变量的数据类型
dynamic b ="a";
b ="str";
print(b.runtimeType);
b =1;
print(b.runtimeType);
b.foo();//编译时静态检查不会报错,但运行时会crash
我发现,在定义时不管是否赋值,之后的类型都是可以改变的。
但是,如上,当我们对dynamic变量调用一个本不属于它自己的函数时foo(),编译期间并不会报错,但是在运行时会crash。
3,Object
类型跟dynamic一样。也是可变的,但是Object会在编译时静态检查,如 :
Object c;
c ="str";
c =1;
// c.foo();//编译时就会报错,无法运行