• Dart(3)-常量


    一、常量声明

    const

    使用const 定义的常量是不可变的, 需要定义并赋值,常量定义的集合,都是只读的,特性是所赋值会传递到子元素,在内存中会复用相同内容对象,const特性与ES6中的类似

    1. const PI = 3.1454567;
    2. const ARY = [1,2,3,4,5];
    3. var ARRY = const[1,2,3,5];

    final

    使用final 定义的变量, 只能赋值一次;并且在运行时赋值,所谓运行时,就是当程序执行到这块代码时才会对final修饰的变量进行赋值。可以是对象、字符串、数字等

    final SCORE = 123; 

    二、与Java的比较

    java中定义常量:

    final static float DEX = 0.5;

    如果常量定义的是基本数据类型(int、double),在dart中不需要定义变量的类型,dart会根据赋值的情况推导类型,如果加上var就会报错。

    三、const与final的区别

    1. const a = [1,2,3,4,5];
    2. a[1] = 10;
    3. print(a[1]);

    如上代码运行会直接报错。上面一中说到赋值会传递到子元素,就是指这个。而final,修饰的则可以直接修改。

    Unhandled exception:
    Unsupported operation: Cannot modify an unmodifiable list
    #0      UnmodifiableListMixin.[]= (dart:_internal/list.dart:90:5)
    #1      main (package:flutter_demo/dartEx.dart:39:4)
    #2      _startIsolate. (dart:isolate-patch/isolate_patch.dart:301:19)
    #3      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

    四、比较

    1.  const a = [1,2,3,4];
    2.  var b = const[1,2,3,4];
    3.  print(identical(a, b)); //true
    4. const a = [1,2,3,4];
    5. const b = [1,2,3,4];
    6. print(identical(a, b)); //true

    五、总结

    const和final在dart中不可以修饰类

    const和final声明的类型均可省略

    const和final初始化不能再赋值

    const和final都不能和var同时使用

    类级别的常量使用static const

    创建相同的const对象在内存中会被共用

    const的不变性是可传递的(传递至集合的子元素),而final则不会

    const常量需要使用const常量进行定义,比如如下方式就不可

    用var定义的const数组是可以重新赋值,而const和final定义的就不行,如下:

    const定义时,必须是编译时常量,比如const datetime = DateTime.now();这么写就会报错

    使用const定义一个数组时,后面的const可以省略,比如

     const a = const[1,2,3];
     const b = [1,2,3];
  • 相关阅读:
    城市内涝及桥洞隧道积水在线监测系统
    经典算法之直接选择排序
    换掉 Postman + Swagger + JMeter,这 5 个 Java 项目绝了
    计算机毕业设计Java装修网站(源码+系统+mysql数据库+lw文档)
    H3C R6900 G5 RAID配置
    深入理解python虚拟机:黑科技的幕后英雄——描述器
    Linux内存管理(十四):buddy 系统分配器之快速分配(2)
    【python笔记】第十节 闭包与装饰器
    小白自学笔记—网络安全(黑客笔记)
    YOLOv5、v7改进之三十五:引入S2-MLPv2注意力机制
  • 原文地址:https://blog.csdn.net/life491249957/article/details/126022324