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

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修饰的组件)

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

猜你喜欢

转载自blog.csdn.net/weixin_46136019/article/details/128982791