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);
}