Dart final 和 const 的区别

Dart final 和 const 的区别

  • final 和 const 都是用于声明不可变的变量的关键字
  • final 和 const 声明的变量在赋值后都是不可变的(只能赋值一次,不能被重新赋值),但 const 的限制更加严格(相当于 const 包含了 final 的特性,所以 final 和 const 不能一起使用)
dart 复制代码
final const x = 10; //编译报错(不能一起使用)

final 运行时常量

  • 可在声明时或构造函数中进行赋值,在函数中声明的,必须在声明时赋值,而在类中声明的,可以在构造函数中进行赋值
  • 但对象的内部状态可能可变(比如 list 列表里的元素)
  • final 支持延迟初始化(通过 late 关键字)
  • 可能多次创建相同值的对象
dart 复制代码
//声明时初始化
final PI = 3.14159;
final name = "Dart";
final now = DateTime.now();
final list = [1, 2, 3];
//延迟初始化(需要 late 配合)
late final int age;
//
list.add(4); //允许(list 引用不变,但内容可改变)
list = [5];  //编译报错(引用不可变)

const 编译时常量

  • 必须在声明时立即赋值,且值在编译时已知
  • 编译器会在编译阶段将其替换为具体值(编译时内联),多次使用同一个 const 变量时,内存中只会存在一份实例(同一常量值共用同一个实例,指向同一内存地址)
dart 复制代码
//声明时初始化(字面量、常量表达式)
const PI = 3.14159; //字面量
const name = "Dart";
const now = DateTime.now(); //编译报错
const list = [1, 2, 3];
const age = 16 + 2; //常量表达式
//
list.add(4); //编译报错

总结

  • final 变量的值可以在运行时确定,而 const 变量的值必须在编译时就能计算出来(不能在运行时动态计算)
  • final 强调引用的不可变性,const 强调值和内存的不可变性
相关推荐
LawrenceLan6 天前
30.Flutter 零基础入门(三十):GridView 网格布局 —— 九宫格与商品列表必学
开发语言·前端·flutter·dart
LawrenceLan7 天前
31.Flutter 零基础入门(三十一):Stack 与 Positioned —— 悬浮、角标与覆盖布局
开发语言·前端·flutter·dart
浩辉_25 天前
Dart - 内存管理与垃圾回收(GC)深度解析
flutter·dart
浩辉_1 个月前
Dart - 认识Sealed
flutter·dart
JMchen1231 个月前
跨平台相机方案深度对比:CameraX vs. Flutter Camera vs. React Native
java·经验分享·数码相机·flutter·react native·kotlin·dart
雨季6661 个月前
Flutter 三端应用实战:OpenHarmony “微光笔记”——在灵感消逝前,为思想点一盏灯
开发语言·javascript·flutter·ui·dart
雨季6661 个月前
Flutter 三端应用实战:OpenHarmony “极简文本字符计数器”——量化表达的尺度
开发语言·flutter·ui·交互·dart
雨季6661 个月前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
爱吃大芒果1 个月前
Flutter for OpenHarmony 实战: mango_shop 购物车模块的状态同步与本地缓存处理
flutter·缓存·dart
雨季6661 个月前
Flutter 三端应用实战:OpenHarmony 简易“动态字体大小调节器”交互模式深度解析
开发语言·flutter·ui·交互·dart