- var
注:与实测结果不一致(来自Flutter中文网,其采用Dart 2.0语法)
可以接收任何类型的变量,Dart中var变量一旦赋值,类型便会确定,不能再改变其类型。Dart是一个强类型语言,任何变量都有确定类型,当用var声明一个变量后,Dart在编译时会根据第一次赋值数据的类型来推断其类型,编译结束后其类型就已经被确定。 var t; t = "hi world"; // 下面代码在dart中会报错,因为变量t的类型已经确定为String, // 类型一旦确定后则不能再更改其类型。 t = 1000; |
实测:
void varTest(){ print('---------var test----------'); // 声明的时候赋值,类型便会确定 var b = 'b'; // b = 10; 报错 // 声明的时候 不 赋值,后期类型同样可以改变 var a; print(a); a = 1000; print(a); print(a.runtimeType); a = "Hello World"; print(a); print(a.runtimeType); var clapping = '\u{1f44f}'; print(clapping); print('\n');
|
结果:
- dynamic和Object
Object
是Dart所有对象的根基类,即所有类型都是Object
的子类(包括Function和Null),所以任何类型的数据都可以赋值给Object
声明的对象. dynamic
与var
都是关键词,声明的变量可以赋值任意对象。
print('---------dynamic and Object test----------'); // 声明的时候赋值,后期也能改变赋值类型 dynamic b = 20; print(b); //20 b = "JavaScript"; //正确 print(b); Object x; x = 'Hello Object'; x = 1000; // dynamic 声明的对象编译器会提供所有可能的组合 // Object 声明的对象只能使用Object的属性和方法 dynamic a = " "; Object a1 = ""; // no warning print(a.length); // warning: // The getter 'length' is not defined for the class 'Object' // print(a1.length); print('\n');
|
dynamic
的这个特点使得我们在使用它时需要格外注意,这很容易引入一个运行时错误.
- final和const
如果您从未打算更改一个变量,那么使用 final
或 const
,不是var
,也不是一个类型。 一个 final
变量只能被设置一次,两者区别在于:const
变量是一个编译时常量,final
变量在第一次使用时被初始化。被final
或者const
修饰的变量,变量类型可以省略。
final声明时可以不赋值,const声明时必须赋值
final 测试:
void finalTest(){
|
const 测试:
void constTest(){
|
结果: