Dart数据类型

Samlss 2019-12-01

数据类型声明示例
String

String a = "你好";

var a = "你好";

int

int b = 1;

var b = 1;

double

double c = 3.14;

var c = 3.14;

boolbool d = true;
List

var e = ["1","2","3"]

List e = new List();

var e = new List<String>();

Map

var person = {

"name":"张三",

"age":20

};

var f = new Map();

  • var声明与类型声明有什么区别?

Dart是比较奇怪,它综合了静态语言与动态语言的特点。

例如,dart可以和python、JavaScript等动态语言一样,可以不预先定义变量类型,直接用var声明一个变量,dart会自动识别出该变量的类型。

但是,假如你用var来赋值a为字符串,那么变量a一直只能是赋值为字符串类型。这与python和JavaScript是不同的。

所以Dart还是属于静态语言(强类型语言)。

  • dart有两种方式声明常量,final与const,这两者有什么不同?

平常使用时,用法好像完全一样,实际上还有区别的。

const PI = 3.14159;
print(PI);

final PI = 3.14159;
print(PI);

但是某些使用时会有问题,例如:

final a = new DateTime.now();
print(a)  // 正常打印

const a = new DateTime.now();  // 会报错

是因为const是编译时常量,在编译期间已经确定了下来。

最重要的是它是运行时常量,并且final是惰性初始化,在执行时才进行初始化。

还有一个区别需要注意:

虽然const与final修饰的常量都不可以继续被赋值。但是final修饰的常量,这个常量包含这集合,那么这个集合还是可变的。而const修饰的常量,即使这个常量包含着集合,由于const传递了不可变性,这个集合是不能进行变化的。

final list0 = [1,2,3];
list0[0] = 4;
print(list0);  // [4,2,3]

const list1 = [1,2,3];
list1[0] = 4;  // 报错
print(list1);

相关推荐