What is the difference between hashCode and memory address?
sobes.tech AI
Answer from AI
hashCode is an integer value representing an object, used in hash-based collections (such as HashSet, HashMap) for quick lookup and comparison. A good hashCode should be consistent for the same object and evenly distributed for different objects. Memory address is the actual location in memory where the object is stored. It is unique for each instance of an object and can change during the program's lifecycle (e.g., during garbage collection).
| Property | hashCode |
Memory address |
|---|---|---|
| Value type | Integer | Pointer to memory location |
| Purpose | Used for efficient storage and lookup in hash collections | Actual location of the object in memory |
| Uniqueness | Not necessarily unique for different objects | Unique for each object in memory |
| Can it change? | Usually does not change (for equal objects) | Can change (e.g., during garbage collection) |
In Dart, by default, the implementation of hashCode for most objects is based on the memory address. However, for custom classes, if the == method is overridden, hashCode should also be overridden to maintain the contract between == and hashCode: if two objects are equal according to ==, their hashCode should be the same.
class MyObject {
final int id;
final String name;
MyObject(this.id, this.name);
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is MyObject &&
name == other.name &&
id == other.id;
}
@override
int get hashCode => Object.hash(id, name); // Override hashCode
}