You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中const与final的区别及final变量为何需添加const的疑问

Dart里final和const的区别,以及为何final变量要加const

核心差异点

  • final:变量仅能被赋值一次,赋值时机可以是运行时(比如从接口拉取数据、调用函数返回值)。赋值完成后变量不能被重新赋值,但如果变量指向的是可变对象(比如普通List),对象内部的内容仍可修改。
    示例:

    final String currentTime = DateTime.now().toString(); // 运行时赋值
    final List<int> numbers = [1, 2];
    numbers.add(3); // 允许修改对象内容
    
  • const:变量的值必须是编译时就能确定的常量,不仅变量本身不可被重新赋值,它指向的对象也是深度不可变的(对象内部内容也不能修改)。const变量本质是编译时常量,程序运行时会复用同一个实例,节省内存。
    示例:

    const int maxCount = 100; // 字面量常量
    const List<int> fixedNumbers = [1, 2];
    fixedNumbers.add(3); // 报错:常量对象不可修改
    

为什么final变量还要加const?

你遇到的场景里,Color.fromARGB是一个const构造函数(Color类的这个构造方法被const修饰)。

当你写final Color _iconColor = Color.fromARGB(210, 198, 15, 1);时,虽然final保证了_iconColor不会被重新赋值,但每次运行到这行代码,都会创建一个新的Color对象;而加上const后,这个Color对象会在编译阶段就被创建好,整个程序中所有用到这个常量的地方都会复用同一个实例,既节省内存,也符合Dart的性能优化最佳实践,所以VS Code会提示你加上const。

简单说:final管的是「变量不能被重新赋值」,而const管的是「对象本身是编译时常量,可复用」,二者作用层面不同,搭配使用能兼顾变量只读性和对象的常量优化。

内容的提问来源于stack exchange,提问作者benbd5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:25:33