Flutter var并不是真正的动态声明,dynamic才是:
Dart属于强类型语言,但可以用var声明变量,Dart对于var声明会自推导出数据类型。
实际上var是编译期的语法糖,而dynamic声明才表示动态类型,dynamic被编译后是一个object类型,在编译期间不对任何的类型进行检查,而是在运行时对类型进行检查。
当var声明初始化时,因为没有指定类型和赋值,会被指定为dynamic,然后赋值的时候初始化才自推导出i为String类型,这时候再对i进行++操作就会有“'int'is not a subtype of type'String'”的报错,因为String类型不能用于计算。
所以,可以看出dynamic类型在运行时才检测类型。