Skip to content
Inspire - Capo Productions

var const final 区别

1. var

  • 含义:由编译器自动推断类型的变量。

  • 特点

    • 可以重新赋值。
    • 一旦被第一次赋值,类型就确定了,不能再换成别的类型。
  • 示例

    dart
    var name = "Jack";   // 类型被推断为 String
    name = "Lucy";       // 可以
    // name = 123;       // 错误,已经被推断成 String

2. final

  • 含义:运行时常量,赋值后不能再修改。

  • 特点

    • 必须在 运行时 赋值一次。
    • 之后不能再改。
  • 示例

    dart
    final time = DateTime.now(); // 合法,运行时才能确定
    // time = DateTime(2000);    // 不能重新赋值

3. const

  • 含义:编译时常量(compile-time constant)。

  • 特点

    • 必须在 编译时 就能确定。
    • 值不可变,并且对象是 canonicalized(相同值会复用同一个对象)。
  • 示例

    dart
    const pi = 3.14159;   // 编译时常量
    // const now = DateTime.now(); // 错误,编译时无法确定

4. 指定类型 (Stringboolint 等)

  • 含义:显式声明变量类型。

  • 特点

    • var 的区别在于:类型写死了,不会依赖推断。
    • 一般在团队开发中,显式写类型更清晰。
  • 示例

    dart
    String name = "Jack";   // 只能是 String
    bool isOk = true;       // 只能是 bool
    int age = 18;           // 只能是 int

5. 小结对比表

关键字/写法可变性类型确定时间值确定时间场景
var可变第一次赋值时运行时一般变量声明
final不可变第一次赋值时运行时运行时常量,比如 DateTime.now()
const不可变编译时编译时编译期常量,比如 pi、配置参数
显式类型 (String 等)可变或不可变取决于 var/final/const声明时运行时/编译时取决于修饰符强调类型约束

👉 你可以理解为:

  • 是否能改:用 var(能改)、final/const(不能改)。
  • 何时确定const(编译期)、final(运行时)。
  • 类型写不写:写了更明确,不写用 var 自动推断。