void main() {
//var
var str = "hello world";
print(str.runtimeType);//String
print(str);//hello world
//str=1會報錯
str=1;
//dynamic
dynamic mic = "hello world";//編譯時不會揣測數據類型,但是運行時會推斷
print(mic.runtimeType);//String
print(mic);//hello world
//但是這樣的壞處就是會讓dart的語法檢查失效,所以有可能會造成混亂而不報錯
//所以不要直接使用dynamic
mic.foo();
//通過它定義的變量會關閉類型檢查,這段代碼靜態類型檢查不會報錯,但是運行時會crash,因爲mic並沒有foo()方法,
// 所以建議大家在編程時不要直接使用dynamic
mic=1;
print(mic.runtimeType);//int 說明類型是可變的
print(mic);//1
//Object
Object object = "hello world";
print(object.runtimeType);//String
print(object);//hello world
object=1;
print(object.runtimeType);//int 說明類型是可變的
print(object);//1
//object.foo();靜態類型檢查會運行報錯會報錯
object.foo();
}
由此可以看出,var定義的類型是不可變的,dynamic和object類型是可以變的,而dynamic 與object 的最大的區別是在靜態類型檢查上