Index: sdk/lib/core/object.dart |
diff --git a/sdk/lib/core/object.dart b/sdk/lib/core/object.dart |
index c7f3fdb12e455e9cf3789960c41d16da271116ec..416ae770dc3228a019c86c3e736cdf93edc07c84 100644 |
--- a/sdk/lib/core/object.dart |
+++ b/sdk/lib/core/object.dart |
@@ -32,7 +32,7 @@ class Object { |
* The equality operator. |
* |
* The default behavior for all [Object]s is to return true if and |
- * only if [:this:] and [other] are the same object. |
+ * only if `this` and [other] are the same object. |
* |
* Override this method to specify a different equality relation on |
* a class. The overriding method must still be an equivalence relation. |
@@ -49,9 +49,9 @@ class Object { |
* * Transitive: For all objects `o1`, `o2`, and `o3`, if `o1 == o2` and |
* `o2 == o3` are true, then `o1 == o3` must be true. |
* |
- * The method should also be consistent over time, so equality of two objects |
- * should not change over time, or at least only change if one of the objects |
- * was modified. |
+ * The method should also be consistent over time, |
+ * so whether two objects are equal should only change |
+ * if at least one of the objects was modified. |
* |
* If a subclass overrides the equality operator it should override |
* the [hashCode] method as well to maintain consistency. |
@@ -59,16 +59,34 @@ class Object { |
external bool operator==(other); |
/** |
- * Get a hash code for this object. |
+ * The hash code for this object. |
* |
- * All objects have hash codes. Hash codes are guaranteed to be the |
- * same for objects that are equal when compared using the equality |
- * operator [:==:]. Other than that there are no guarantees about |
- * the hash codes. They will not be consistent between runs and |
- * there are no distribution guarantees. |
- * |
- * If a subclass overrides [hashCode] it should override the |
- * equality operator as well to maintain consistency. |
+ * A hash code is a single integer which represents the state of the object |
+ * that affects [==] comparisons. |
+ * |
+ * All objects have hash codes. |
+ * The default hash code represents only the identity of the object, |
+ * the same way as the default [==] implementation only considers objects |
+ * equal if they are identical (see [identityHashCode]). |
+ * |
+ * If [==] is overridden to use the object state instead, |
+ * the hash code must also be changed to represent that state. |
+ * |
+ * Hash codes must be the same for objects that are equal to each other |
+ * according to [==]. |
+ * The hash code of an object should only change if the object changes |
+ * in a way that affects equality. |
+ * There are no further requirements for the hash codes. |
+ * They need not be consistent between executions of the same program |
+ * and there are no distribution guarantees. |
+ * |
+ * Objects that are not equal are allowed to have the same hash code, |
+ * it is even technically allowed that all instances have the same hash code, |
+ * but if clashes happen too often, it may reduce the efficiency of hash-based |
+ * data structures like [HashSet] or [HashMap]. |
+ * |
+ * If a subclass overrides [hashCode], it should override the |
+ * [==] operator as well to maintain consistency. |
*/ |
external int get hashCode; |