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

文章详细介绍了Dart编程语言中`identical`函数的用法,它用于检查两个引用是否指向同一对象。通过示例展示了非常量和常量对象在内存中的处理方式,强调了`const`关键字在创建对象时的影响,尤其是在列表和自定义类(如`Container`)中的应用。常量构造函数在节省内存和提升性能方面的作用也被提及,特别是在Flutter框架中,const组件在重建时不会被重新构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

identical函数

用法:

bool identical(
Object? a,
Object? b
)

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

例1:

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

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

例2:

print(identical([2],[2]));//false
  
  var 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)); //true
  print(identical(o1,o1));  //true


  print(identical(const[2],const[2]));//true
  
  const 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));//false
  
  
  var 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修饰的组件)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值