声明变量

Dart可以像Java那样明确声明一个变量的类型:

String s = "abc";

但这并不需要,Dart推荐使用var来声明变量,它能智能推断出变量的类型。所以更好的写法是这样 :

var s = "abc";
//runtimeType表示变量的运行时类型
print(s.runtimeType); // String

假设变量的类型并不固定是一种,需要能接收多种类型,可以使用Object或者dynamic来声明变量:

Object s = "abc";
print(s.runtimeType); //String
s = 1;
print(s.runtimeType);//int

dynamic v = 123;
print(v.runtimeType);//int
v = "我是动态类型";
print(v.runtimeType);//String

可以看出用Objectdynamic修饰的变量类型并不固定,以最后一次的值为准。

变量初始值

如果声明了一个变量,没有赋值过。那它的初始值是什么呢?

在Java中变量类型不同,初始值也不同,比如Integer的初始值为0,String的初始值为null。但在Dart中,一切皆对象,就算是数字型的变量也是对象;所以Dart中所有变量初始值都是null,好处是大一统了,判断起来更方便。

int num;
print(num == null);//true
String name;
print(name == null);//true

final 和 const

Dart中使用final表示一个不能被修改的变量,用const表示编译期常量,也是在编译阶段就要确定值是什么。

final name = "lxj";
name = "aaa"; //报错

const maxSize = 1000;
const a = name; //编译期常量不能赋值一个变量,必须赋值为编译阶段就能计算或确定的值

常量值

const关键字除了声明编译期常量,也可以用来创建常量值,注意:常量值是一种特殊的值。

var list = const []; //[]表示集合,const []表示值为空集合的常量值
list = [1, 2];
final foo = const ['a', 'b'];

list是一个变量,它的值是常量值,但它本身并不是一个常量,所以仍然能被重新赋值。

foo是一个不可变常量,它的值也是一个常量值,但它本身不能再被赋值了。

常量值是一种特殊的值,它的本质还是一个值。

如果你还是无法理解常量值,暂时先放一放。等后面看到更多它的使用,也许就慢慢明白了。

更新时间: 4/27/2019, 8:54:35 PM