identical函数

用法:

bool identical(
Object? a,
Object? b
)

作用:检查两个引用是否指向同一个对象,简单说就是检查两个实例是否共用一个存储空间

例1:

  var o1= new Object();var o2= new Object();print(identical(o1,o2)); //falseprint(identical(o1,o1));  //true

由此得知,o1,o2不共用存储空间

例2:

print(identical([2],[2]));//falsevar a=[2];var b=[2];print(identical(a,b));//false

同样的,两个等同值的列表也是不公用存储空间的。

但是,有一个特例const:

const关键字在多个地方创建相同的对象的时候,内存中只保留了一个对象

例3:
const Object() 表示实例化常量构造函数

  var o1=const Object();var o2=const Object();print(identical(o1,o2)); //trueprint(identical(o1,o1));  //trueprint(identical(const[2],const[2]));//trueconst a=[2];const b=[2];print(identical(a,b));//true

那么可知,共享内存空间的前提条件是:

1.常量
2.值相等

常量构造函数的特点

这是我们定义的Container类:

class Container{int width;int height;Container({required this.width,required this.height});//这是一个普通的构造函数
}void main(){var c1=new Container(width: 100,height: 100);var c2=new Container(width: 100,height: 100);print(identical(c1,c2));//false}

这是具有常量构造函数的container类:

class Container{final int width;final int height;const Container({required this.width,required this.height});
}void main(){var c1=new Container(width: 100,height: 100);var c2=new Container(width: 100,height: 100);print(identical(c1,c2));//falsevar c3=const Container(width: 100,height: 100);var c4=const Container(width: 100,height: 100);print(identical(c3,c4));//true}

所以我们可以得知:

1.常量构造函数需以const关键字修饰

2.const构造函数必须用于成员变量都是final的类

3.如果实例化时不加const修饰符,即使调用的是常量构造函数,实例化的对象也不是常量实例

4.实例化常量构造函数的时候,多个地方创建这个对象,如果传入的值相同,只会保留一个对象

5.Flutter中,const修饰不仅仅是节省组件构建时的内存开销,Flutter 在需要重新构建组件时,不会重新构建const组件(在重新build的时候不会构建const修饰的组件)

在特定情况下使用常量构造函数,能极大节约内存空间,并有效提升应用性能

Flutter学习笔记:identical函数的用法以及常量构造函数的特点相关推荐

  1. Flutter学习笔记(18)--Drawer抽屉组件

    如需转载,请注明出处:Flutter学习笔记(18)--Drawer抽屉组件 Drawer(抽屉组件)可以实现类似抽屉拉出和推入的效果,可以从侧边栏拉出导航面板.通常Drawer是和ListView组 ...

  2. python里while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  3. python中while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  4. Matlab学习笔记 figure函数

    Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...

  5. MySQL学习笔记—自定义函数

    MySQL学习笔记-自定义函数 注释语法: MySQL服务器支持3种注释风格: 从'#'字符从行尾. 从'– '序列到行尾.请注意'– '(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如 ...

  6. matlab机器人工具箱学习笔记——ikine函数

    matlab机器人工具箱学习笔记--ikine函数 ikine函数用法 使用实例 链接: https://blog.csdn.net/weixin_42596724/article/details/8 ...

  7. while用法python_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  8. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  9. Flutter学习笔记(10)--容器组件、图片组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...

最新文章

  1. 灰度图像--图像增强 双边滤波 Bilateral Filtering
  2. JS,JQ,PHP的小知识点整理
  3. 基于 Redis 实现的分布式锁
  4. 70 个数据分析常用网址,我先收藏了!
  5. 申请计算机助理的英语作文,有关于应聘团队助理的申请信的英语作文要有中文翻译...
  6. python中集合变量_详解python的变量缓存机制
  7. 程序员为什么非得参加一场编程竞赛?
  8. 论文笔记_S2D.44_自监督的从稀疏到稠密:用激光雷达和单目摄像机进行自监督深度补全
  9. 大气压力换算公式_气压单位换算表(压力单位换算公式大全)
  10. 主曲率、平均曲率、高斯曲率、法曲率、主方向
  11. Android自定义系列——10.PathMeasure
  12. 直角三角形(rigtri)
  13. moment.js时间操作
  14. 《爱乐之城》配色分享
  15. linux4.4 内核 netlink,wpa_supplicant与内核nl80211通信之Generic Netlink
  16. tradingview 修改K线的颜色,边框色,线条色
  17. 微软股价 2019 年飙升 55.3%,创十年来最佳表现!
  18. 29.【C语言】进制转换:10转16、10转2、2转10、16转10(Demo)
  19. GDAL使用DEM数据计算坡度坡向
  20. 【USACO3.1】解题报告

热门文章

  1. git describe --tags 后面的信息是什么意思
  2. photoshop打开图片显示的是索引,无法编辑解决
  3. 鸿蒙创造法则太极法则,【三九三六 鸿蒙战技】
  4. python2好还是3好_捉急,小白选择python2还是3?
  5. 【NodeJS】log4js打印日志
  6. js实现批量下载图片
  7. 度数计算机在线使用,在线测视力,网上测视力,电脑测视力,可以测视力的软件,网上测视力工具...
  8. 关于分部视图(Partial View)
  9. flutter 设置状态栏的颜色,背景appBar
  10. 【量化笔记】OBV指标交易策略