Dart2.var dynamic Object变量

1.var dynamic Object

var:如果没有初始值,可以变成任何类型
dynamic:动态任意类型,编译阶段不检查类型
Object:动态任意类型,编译阶段检查检查类型
区别:
唯一区别 var 如果有初始值,类型被锁定

没有初始化的变量默认值都是null。一切皆对象,对象的默认值是null

variable.dart

void main(){
  //未初始化变量声明var dynamic Object
  dynamic data;
  data = 1;
  data = 'aaaa';//var dynamic Object 未初始化的变量可以重新赋值

  //声明初始化变量
  var data1 = 123;
//  data1 = "2222";//报语法错误 var 初始化的变量不能再赋值
  dynamic data2 = 'aaaa';
  data2 = '21'; //dynamic初始化的变量 可以重新再赋值
  Object data3 = 'eeee';
  data3 = 'oooo'; //Object初始化的变量 可以重新再赋值

  dynamic d1 = '1234';
  Object o1 = '1111';
  d1.test(); //dynamic编译的时候不会去检查类型,但是运行的时候还是会报错
//  o1.test(); //报语法错误,Object编译的时候会检查类型
}

2.变量final和const不能和var同时使用

void main(){
  //1.  被final或者const修饰的变量,变量类型可以省略
  final fVariable1 = 'aaaaaa';
  //上面的语句相当于下面的  final String fVariable1 = 'aaaaaa';
  const cVariable1 = 'bbbbb';
  // 上面的语句相当于下面的 const String cVariable1 = 'bbbbb';

  //2.  被 final 或 const 修饰的变量无法再去修改其值。
//   fVariable1 = 'damon';//有语法错误,不能修改值
//   cVariable1 = 'damon';//有语法错误,不能修改值

  //3.  final或const不能和var同时使用。
//  const var fff = 'ccc';//有语法错误 const var不能一起使用
//  final var fff = 'ccc';//有语法错误 final var不能一起使用

  //4.  如果是类级别常量,使用static const
  DateTime; //可参照DateTime static const int monday = 1;

//5.  const可以使用其他 const常量的值来初始化其值
  const width = 100;
  const height = 100;
  const square = width * height;

  //6.  const赋值 申明可省略
  const List clist = [1, 2, 3]; //const可以省略
//  const List clist = const [1, 2, 3];//dart 2之前,const赋值必须用const声明

//7.  可以更改非final,非const变量的值,即使它曾经具有const值
  var varList = const [1, 2, 3];
  final finalList = const [1, 2, 3];
  const constList = [1, 2, 3];
  varList = [1];
//  constList = [1];  //有语法错误  不能修改final变量的值
//  finalList = [1];  //有语法错误  不能修改const变量的值

//8.  const导致的不可变性是可传递的
  final List ls = [1, 2, 3];
  ls[1] = 4;
  print(ls);  //输出  [1, 4, 3]
  const List ls1 = [1, 2, 3];
//  ls1[1] = 4; //有语法错误  不能修改const里面的元素的值

//9. 相同的const常量不会在内存中重复创建
  final finalList1 = [1, 2];
  final finalList2 = [1, 2];
  print(identical(finalList1, finalList2)); //输出false   identical用于检查两个引用是否指向同一个对象

  const constList1 = [1, 2];
  const constList2 = [1, 2];
  print(identical(constList1, constList2)); //输出true    identical用于检查两个引用是否指向同一个对象

  //10. const 需要是编译时常量
  var finalDateTime = DateTime.now();
  print(finalDateTime); //2020-06-17 01:17:32.973108   打印当前的时间
  final DateTime finalDateTime1 = DateTime.now();
//    const DateTime constDateTime = DateTime.now();//报语法错误  DateTime.now() 是运行期计算出来的值
}

猜你喜欢

转载自blog.csdn.net/augfun/article/details/106799198