(四十七)Dart 中的 `identical` 函数与 `const` 关键字
Dart 中的 identical
函数与 const
关键字
identical
函数
identical
函数用于检查两个引用是否指向同一个对象。它返回一个布尔值,表示两个对象是否是同一个实例。
用法
bool identical(
Object? a,
Object? b
)
示例代码解析
以下代码展示了 identical
函数的用法:
void main() {
// 普通对象
var o1 = Object();
var o2 = Object();
print(identical(o1, o2)); // false,不同对象
print(identical(o1, o1)); // true,同一个对象
// 常量对象
var o3 = const Object();
var o4 = const Object();
print(identical(o3, o4)); // true,共享存储空间
print(identical(o3, o3)); // true,共享存储空间
// 列表
print(identical([2], [2])); // false,不同对象
var a = [2];
var b = [2];
print(identical(a, b)); // false,不同对象
// 常量列表
print(identical(const [2], const [2])); // true,共享存储空间
const c = [2];
const d = [2];
print(identical(c, d)); // true,共享存储空间
// 不同值的常量列表
const e = [2];
const f = [3];
print(identical(e, f)); // false,不同值
}
代码说明
-
普通对象
var o1 = Object();
和var o2 = Object();
创建了两个不同的对象。identical(o1, o2)
返回false
,因为它们是不同的对象。identical(o1, o1)
返回true
,因为它们是同一个对象。
-
常量对象
var o3 = const Object();
和var o4 = const Object();
创建了两个常量对象。identical(o3, o4)
返回true
,因为常量对象在内存中共享存储空间。
-
列表
print(identical([2], [2]));
返回false
,因为它们是不同的列表对象。var a = [2];
和var b = [2];
创建了两个不同的列表对象。identical(a, b)
返回false
,因为它们是不同的对象。
-
常量列表
print(identical(const [2], const [2]));
返回true
,因为常量列表在内存中共享存储空间。const c = [2];
和const d = [2];
创建了两个常量列表。identical(c, d)
返回true
,因为它们共享存储空间。
-
不同值的常量列表
const e = [2];
和const f = [3];
创建了两个不同值的常量列表。identical(e, f)
返回false
,因为它们的值不同。
输出结果
运行上述代码,输出结果为:
false
true
true
true
false
true
false
注意事项
-
常量对象的共享存储空间
- 使用
const
关键字声明的对象在内存中共享存储空间,即使它们被多次声明。 - 这适用于所有常量对象,包括常量列表、常量映射等。
- 使用
-
普通对象的独立存储空间
- 使用
new
或直接调用构造函数创建的对象在内存中是独立的,即使它们的值相同。
- 使用
-
identical
函数的用途identical
函数用于检查两个引用是否指向同一个对象,而不是检查它们的值是否相等。- 如果需要检查值是否相等,可以使用
==
运算符。
总结
通过使用 identical
函数,可以检查两个引用是否指向同一个对象。在 Dart 中,const
关键字声明的常量对象在内存中共享存储空间,而普通对象则在内存中独立存储。合理使用 const
关键字可以减少内存占用,提高代码效率。希望本教程对您有所帮助!