(五十二)Dart 中的常量构造函数
通过使用常量构造函数,可以创建编译时常量对象。在 Dart 中,常量对象在内存中共享存储空间,而普通对象则在内存中独立存储。合理使用const关键字可以减少内存占用,提高代码效率。希望本教程对您有所帮助!
Dart 中的常量构造函数
常量构造函数的特性
在 Dart 中,常量构造函数是一种特殊的构造函数,用于创建编译时常量。以下是常量构造函数的主要特性:
-
必须使用
const关键字修饰
常量构造函数必须以const关键字修饰。 -
类的成员变量必须是
final
使用常量构造函数的类,其成员变量必须是final。 -
实例化时不加
const修饰符,对象不是常量实例
即使调用的是常量构造函数,如果实例化时不加const修饰符,实例化的对象也不是常量实例。 -
多个地方创建相同值的对象,只会保留一个对象
如果传入的值相同,Dart 会确保只保留一个对象。 -
Flutter 中的优化
在 Flutter 中,const修饰的组件在构建时不会被重建,因为它们是不可变的。
示例代码解析
以下代码展示了常量构造函数的用法:
class Container {
final int width;
final int height;
const Container({required this.width, required this.height});
}
void main() {
var c1 = Container(width: 100, height: 100);
var c2 = 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
var c5 = const Container(width: 100, height: 110);
var c6 = const Container(width: 120, height: 100);
print(identical(c5, c6)); // false
}
代码说明
-
普通对象
var c1 = Container(width: 100, height: 100);和var c2 = Container(width: 100, height: 100);创建了两个不同的对象。identical(c1, c2)返回false,因为它们是不同的对象。
-
常量对象
var c3 = const Container(width: 100, height: 100);和var c4 = const Container(width: 100, height: 100);创建了两个常量对象。identical(c3, c4)返回true,因为常量对象在内存中共享存储空间。
-
不同值的常量对象
var c5 = const Container(width: 100, height: 110);和var c6 = const Container(width: 120, height: 100);创建了两个不同值的常量对象。identical(c5, c6)返回false,因为它们的值不同。
输出结果
运行上述代码,输出结果为:
false
true
false
注意事项
-
常量构造函数的成员变量必须是
final
使用常量构造函数的类,其成员变量必须是final。 -
实例化时不加
const修饰符,对象不是常量实例
即使调用的是常量构造函数,如果实例化时不加const修饰符,实例化的对象也不是常量实例。 -
多个地方创建相同值的对象,只会保留一个对象
如果传入的值相同,Dart 会确保只保留一个对象。 -
Flutter 中的优化
在 Flutter 中,const修饰的组件在构建时不会被重建,因为它们是不可变的。
总结
通过使用常量构造函数,可以创建编译时常量对象。在 Dart 中,常量对象在内存中共享存储空间,而普通对象则在内存中独立存储。合理使用 const 关键字可以减少内存占用,提高代码效率。希望本教程对您有所帮助!
更多推荐


所有评论(0)