Object是Dart中所有类的基类。它是一个通用的类型,可以表示任何对象。所有的Dart对象都可以赋值给Object类型的变量。由于Object是所有类的超类,因此可以使用Object类型的变量来调用一些通用的方法,如toString()和hashCode()。
dynamic是Dart中的一种特殊类型。使用dynamic类型声明的变量可以在运行时具有任何类型的值。它被称为动态类型,因为它的类型在编译时不会被静态检查。这意味着可以对dynamic类型的变量执行任何操作,而编译器不会发出类型错误。但是,由于缺乏静态类型检查,使用dynamic类型可能会导致类型错误和运行时异常。
var是Dart中的一种关键字,用于声明变量而不指定其类型。编译器会根据变量的初始值推断出其类型,并在编译时进行静态类型检查。一旦变量的类型被推断出来,它就被视为具有该类型,不能更改为其他类型。与dynamic不同,var变量在编译时进行类型检查,如果尝试对其执行不兼容的操作,编译器会发出类型错误。
Object obj = 'Hello'; // Object类型变量可以存储任何对象
print(obj.toString()); // 使用Object类型的变量调用通用方法
dynamic dynamicVar = 10; // dynamic类型变量可以具有任何类型的值
dynamicVar = 'World'; // 可以将不同类型的值赋给dynamic类型的变量
print(dynamicVar.length); // 在运行时执行操作,编译器不会进行类型检查
var varVar = 3.14; // 根据初始值推断变量类型为double
// varVar = 'Dart'; // 不能将不同类型的值赋给var类型的变
总结:
Object是所有类的基类,可以表示任何对象。
dynamic是一种动态类型,可以在运行时具有任何类型的值,但缺乏静态类型检查。
var是一种通过值推断类型的关键字,具有静态类型检查,类型在编译时确定并不可更改。