变量是‘存储器中的命名空间’,用于存储值.变量名称称为标识符,标识符命名规则:
- 标识符不能是关键字
- 标识符可以包含数字和字母
- 标识符不能包含空格和特殊字符,但下划线(_)和美元($)符号除外
- 变量名称不能以数字开头;
语法:
- 使用var声明变量可以赋值不同类型的值
- 没有赋初值的变量都会默认为null
- 使用final声明一个只能赋值一个变量
- 使用const声明一个常量
- 使用const声明必须是编译时的常量
代码示例:
//变量
//赋值不同类型的值
var a;
print(a);//result:null
a = 20;//运行时确定的变量
print(a);//result:20
a = 'dart';
print(a);//result:dart
final b = 20;
// b = 50;//final声明一个只能赋值一次变量
//常量
const c = 20;//编译期确定的常量
// c = 50;
print(c);
var list = const[1,2,3,4];
var obj = const Object();
dynamic关键字
没有声明明确的类型,动态类型;
final和const区别
- final:表示单一赋值,final变量或字段必须初始化,一旦初始化,就不能改变final变的值,final修饰变量;
- const:const修饰值,可以在创建集合使用,构造对象使用,意味着对象的整个深度状态可以在编译时完全确定,并且对象被冻结完全不可变;使用const关键字声明的变量是隐式的final,只有const变量可用于计算编译时常量.编译时常量是常量,其值在编译时确定.
dynamic、Object、var
- var和dynamic完全是俩个概念,不应该放在一起比较,var实际是编译器抛出的语法糖,一旦被编译,编译器就会自动匹配var变量的实际类型,并用实际类型替换该变量的声明,等同于我们在编码时使用了实际类型声明,而dynamic被编译成Object类型,编译器编译时不会对dynamic进行类型检查
- dynamic类型再编译后是一个object类型,和object的区别?
- 编译时类型检查
- 类型转换
网友评论