目录
[var、const、final 核心区别对比](#var、const、final 核心区别对比)
本节系统讲解了 Dart 语言中三种核心的变量与常量声明方式:var 、const 和 final。我们将深入探讨它们各自的语法、特性、适用场景以及核心区别,并通过代码示例帮助您快速掌握如何在实际开发中正确选择和使用它们。
目标读者: Dart/Flutter 初学者、希望巩固变量声明基础知识的开发者,以及需要清晰理解 const 与 final 区别的编程爱好者。
一.Dart的变量声明-----var
语法:var 变量名=值/表达式;
注意:var在第一次赋值之后,类型被确定 后面不允许更改类型
特点:const是代码编译前被确定的,不允许表达式中有变量存在,必须有常量或者固定值
代码实例:
Dart
void main(List<String> args) {
var age=20; //var第一次赋值之后,类型被确定 后面不允许更改类型
print(age);
age=21;
print(age);
var age1=15+17;
print(age1);
}
var在第一次赋值之后,类型被确定 后面不允许更改类型,如上图所示age的类型为整型int,如果我们将其改为字符型char会发生什么呢?
如图所示可以看到改完后报错了。
二.Dart中的常量声明-----const
场景:在数学中圆周率π永远是3.1415926....,是不允许被改变的,因此使用const来进行声明同类
语法:const 属性名=值/表达式;
注意:const表达式里面的值不允许有变量值
代码示例:
1.正常代码:
Dart
void main(List<String> args) {
const num1=3.1415926;
const length = 2 * num1 * 10;
print(length);
}

2.注意事项演示代码:
Dart
void main(List<String> args) {
var num1=3.1415926;
const num=num1; //num1为变量,将变量引入const运行就会出错
const length = 2 * num * 10;
}

三.Dart中的常量声明-----final
场景:需要当前时间作为当前唯一的操作时间,时间一旦被确定就不可以被修改。
语法:final 属性名=值/表达式;
特点:final变量在运行时被初始化,其值设置后不可修改。
代码实例:
Dart
void main(List<String> args) {
final time = DateTime.now();
print(time);
}

2.const 与 final的区别:
Dart
void main(List<String> args) {
final time = DateTime.now();
time = DateTime.now();
print(time);
}
两者的区别在于final是运行时不可以修改,const是编译时确认不可修改。
var、const、final 核心区别对比
下表清晰地对比了 var、const、final 三者在初始化时机、值可变性、类型要求和使用场景上的核心区别:
| 特性 | var | const | final |
|---|---|---|---|
| 初始化时机 | 运行时(第一次赋值时) | 编译时 | 运行时 |
| 值可变性 | 可重新赋值(同类型) | 不可更改 | 不可更改 |
| 类型要求 | 类型在第一次赋值时确定,之后不可更改类型 | 必须是编译时常量,表达式不能包含变量 | 可以是运行时确定的常量或变量 |
| 使用场景 | 值需要改变的变量 | 编译时就能确定且不会改变的值(如数学常数、配置值) | 运行时才能确定且不会改变的值(如当前时间、API 响应结果) |
| 示例 | var age = 20; age = 21; // 允许 |
const pi = 3.1415926; const length = 2 * pi * 10; // 允许 |
final time = DateTime.now(); // time = DateTime.now(); // 错误,不可重新赋值 |
四.总结
本章介绍了 Dart 语言中三种主要的变量和常量声明方式,它们各有特点,适用于不同的场景:
- var:用于声明变量,类型在第一次赋值时确定,之后不可更改类型,但可以重新赋值。
- const:用于声明编译时常量,值必须在编译时确定,不允许在表达式中使用变量。
- final:用于声明运行时常量,值在运行时初始化,一旦赋值后不可更改。
核心区别:
- const vs final:const 是编译时常量,值在编译时确定;final 是运行时常量,值在运行时确定。
- var vs const/final:var 声明的变量可以重新赋值(同类型),而 const 和 final 声明的常量一旦赋值后不可更改。
使用建议:
- 如果值在编译时就能确定且不会改变,使用
const。 - 如果值在运行时才能确定且不会改变,使用
final。 - 如果值需要改变,使用
var。
掌握这三种声明方式的区别,有助于编写更高效、更安全的 Dart 代码。