dart中const和final的区别

2021-06-29  本文已影响0人  凯司机
main(List<String> args) {
  // 2.1明确的声明一个字符串
  String name = 'ksj';
  // 类型推导(var/final/const) —— 类型推导的方式虽然没有明确的指定变量的类型,但是变量一经指定后将有自己的明确的类型
  var age = 20;
  // age = "ksj"; 这种赋值报错,因为类型的不一致
  
  // 2.2final声明————常量
  final height = 1.88;
  // height = 2.00;
  
  // 2.3const声明————常量
  const address = "广州市";
  // address = "北京市"
  
  /*
  const 和 final的相同点:
  一经赋值之后都不可以改变
  **/

   /*
  const 和 final的区别:
  const必须赋值 —— 常量值(编译期间需要有一个确定的值)
  final可以通过计算或函数获取一个值(运行期间确定一个值)
  **/
  
  final time = DateTime.now();
  // const time = DateTime.now();  错误的用法
  // final开发中的用的多一些
  
  
  final p1 = Person('1');
  final p2 = Person('1');
  // 判断两个地址是否一致
  print(identical(p1, p2));
  //  return false


  // 区别:
  const p3 = const PersonA('1');
  const p4 = PersonA('1');
  // const可以省略
  // 判断两个地址是否一致
  print(identical(p3, p4));
  // 返回true
  
  // 保持传入内容一致将会共用一个地址——节省堆内存——内容不一致的时候地址会发生改变
  // 严格意义上来说,这不是一个单例的——存放于常量静态区
}

class Person {
  String name;
  // 简单构造函数
  Person(String name) {
    this.name = name;
 }
}

class PersonA {
  // 更加推荐下面的写法
  final String name;
  const PersonA(this.name);
}
上一篇 下一篇

猜你喜欢

热点阅读