📅  最后修改于: 2023-12-03 14:40:37.055000             🧑  作者: Mango
在 Dart 中,我们可以通过使用 identityHashCode()
方法获取一个对象的内存位置。这个方法返回一个整数,表示该对象在内存中的地址。
var obj = {"name": "Alice"};
var hashCode = identityHashCode(obj);
print("'$obj' 的内存位置是:$hashCode");
上述示例代码会输出类似下面的结果:
'{name: Alice}' 的内存位置是:438858011
需要注意的是,identityHashCode()
方法只适用于对象类型,对于基本类型(如 int、double、bool)并不适用。而且,对象的内存位置不是固定的,在程序运行过程中可能会发生改变。
除此之外,Dart 还提供了一个 Object.hashCode()
方法,用于为对象生成哈希码。这个哈希码也可以用来判断两个对象是否相等。但与 identityHashCode()
不同的是,哈希码并不代表对象在内存中的地址。
var obj1 = {"name": "Alice", "age": 20};
var obj2 = {"name": "Alice", "age": 20};
print("obj1 的哈希码是:${obj1.hashCode}");
print("obj2 的哈希码是:${obj2.hashCode}");
print("obj1 和 obj2 是否相等:${obj1 == obj2}");
上述示例代码会输出类似下面的结果:
obj1 的哈希码是:388764341
obj2 的哈希码是:1102317769
obj1 和 obj2 是否相等:false
当 obj1 和 obj2 的属性值一样时,它们的哈希码是不同的,因此它们被认为是不相等的对象。