Dart語法中dynamic,var,object三者的區別

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 的最大的區別是在靜態類型檢查上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章