Dart - 变量

2020-07-23  本文已影响0人  卖菇凉的小火柴丶

1.Dart中变量的两种方式

  String str1 = "A";  //直接指定类型
  var str2 = "B";     //让编译器自己判断类型

  print(str1);
  print(str2);

输出结果:

A
B

2.Dart中类型的改变

在Dart中一旦变量的类型被确定,就不能再被更改类型

  var name = "name";
  print(name.runtimeType);
  name = 10; //这里直接会报错

  String name;
  name = "abc";
  print(name.runtimeType);
  name = 10; //这里直接会报错

输出结果:

String
String

\color{red}{类型不能改变的特殊情况}

  var name;
  name = "abc";
  print(name.runtimeType);
  name = 10;
  print(name.runtimeType);

输出结果:

String
int

\color{red}{因为用var声明变量的时候没有直接赋值,那么该变量就是NULL,也就是Object,那么该变量的类型可以任意改变}

3.dynamic和Object

Object是dart所有对象的基类,也就是所有的类型都是Object的子类,包括int,Function,Null等。所以任意类型都可以用Object去声明。
dynamic跟var一样都是关键词,都能声明变量。dynamic和Object一样都能表示任意类型,所以它俩声明的变量后期都可以改变类型。但是不同之处就是,dynamic会提供声明的变量的所有可能组合,而Object只是提供Object的属性与方法。
日常推荐用Object。
dynamic或者Object修饰的变量一旦赋值,编译器就能推断出该变量的具体的类型。

  dynamic name;
  print(name.runtimeType);
  name = "a";
  print(name.runtimeType);
  name = 10;
  print(name.runtimeType);

输出结果:

Null
String
int

  Object name;
  print(name.runtimeType);
  name = "a";
  print(name.runtimeType);
  name = 10;
  print(name.runtimeType);

输出结果:

Null
String
int

4.final const

这里用这两个关键词修饰以后似乎不应该叫变量了。
如果不打算改变这个变量,那么就用这俩关键词修饰。

区别:
final修饰的变量是在第一次使用的时候才被初始化
const是编译的时候就确定值

上一篇下一篇

猜你喜欢

热点阅读