Flutter开发Dart极速入门 (变量)

Dart入门系列:
Flutter开发Dart极速入门 (基本类型)
Flutter开发Dart极速入门 (变量)
Flutter开发Dart极速入门 (函数)
Flutter开发Dart极速入门 (操作符与流程控制语句)
Flutter开发Dart极速入门 (异常)
Flutter开发Dart极速入门 (类和对象)
Flutter开发Dart极速入门 (泛型)
Flutter开发Dart极速入门 (Dart异步详解)
Flutter开发Dart极速入门 (生成器)
Flutter开发Dart极速入门 (库的使用)
Flutter插件化开发注意事项(Packages与插件化开发)
Flutter在Android原生工程中的集成

变量

变量的声明

  • var

  • dynamic

  • Object

    使用示例

      var data1;	// 没有定义初始值, 可以变成任意类型
      data1 = 'str';
      data1 = 1;
    
      dynamic data2;
      data2 = 'str';
      data2 = 1;
    
      Object data3;
      data3 = 'str';
      data3 = 1;
    
  • 区别

    • var 如果没有初始值, 可以变成任意类型
    • var 有初始值类型就会被锁定 (声明一个初始化的变量之后, 变量的类型不可再改变)
      var variable1 = 'str';	//声明了初始化变量
    //  variable1 = 1;	// 编译不通过, variable1的类型已经被推断为了string
    
    • dynamic 和 Object声明一个初始化的变量之后, 变量的类型仍然可改变
    • dynamic:动态任意类型,编译阶段不检查类型, 如调用了该对象的一个不存在的函数, 编译仍可通过, 运行会报错
    • Object:动态任意类型,编译阶段检查检查类型

变量的默认值

  • 没有初始化的变量自动获取一个默认值: null
  • 一切皆对象, 对象的默认值为null (*一切: 包括bool, int等初始值均为null)

final 和 const

  • 共同点

    1. 变量的类型可以忽略

      final str = "str"; 
      
    2. 无法修改其值

      //  str = 'str1'; // a final variable, can only be set once.
      
    3. 无法和var同时使用

      //  final var fvar = 'str'; // 编译不通过: remove var
      
  • 区别

    1. 类级别常量使用static const

      //  如系统的 DateTime 类中:
      //  static const int monday = 1;
      //  static const int tuesday = 2;
      
    2. const 常量的值可以使用其他const 常量来初始化

      const width = 1;
      const height = 2;
      const square = width * height;
      
    3. const 赋值 申明可省略

      const List conList = [1,2,3]; // = const [1,2,3]
      
    4. 可以更改非final 非 const 变量的值, 即使他曾经拥有const值

      var list = const [1,2,3];
      list = [1];	// 可以正常编译
      
    5. const导致的不可变性是可传递的

        final fList = [1,2,3];
        const cList = [1,2,3];
        fList[1] = 0; // fList[1,0,3]
      //  cList[1] = 0; // Cannot modify an unmodifiable list
        print(fList);
        print(cList);
      
    6. 相同的const常量在内存中不会重复创建

      const con1 = [1,2,3];
      const con2 = [1,2,3];
      print(identical(con1, con2)); // identical用于检查两个引用是否指向同一对象: true
      final fin1 = [1,2,3];
      final fin2 = [1,2,3];
      print(identical(fin1, fin2)); // false
      
    7. const 的赋值需要是编译时常量

        final DateTime dateTime1 = DateTime.now();  // 运行时才能获取其值
      //  const DateTime dateTime2 = DateTime.now();  // 编译不通过: const variables must be initialized with a constant value.
        const sum = 1+2;  // 正确用法: 编译时常量
      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值