如果类的toString()
方法Object
返回对象的哈希码,那么hashCode()
Object类的方法是做什么的呢?如果它还返回对象的哈希码,那么为什么方法返回toString()
的值与方法返回的值相同hashCode()
?
2 回答
Object 是所有其他 Java 类的基类。这意味着所有类都隐式支持toString
和hashCode
。但是许多类覆盖了一个或两个,因此它们没有得到 Object 的默认实现。
例如,toString
Double 对象将返回浮点数的有意义的默认格式版本,而hashCode
double 对象将返回浮点值的散列版本,适用于在散列表中键入搜索。
toString
主要用于支持调试打印。它返回的是开发人员认为对该特定对象类“最有意义”的任何内容。(对于 Object 没有太多可使用的,因此使用了类名与 hashCode 值的文本表示相结合。) hashCode
另一方面,旨在促进基于散列的搜索,因此开发人员尝试生成一个数字,在比较不同的对象上很有可能不同,但在比较相等的对象上保证相同。
这里有几点:
toString()
返回 className@hashCode
hashCode()
仅返回类的 hashCode
hashCode 用于 Collections(Sets 和 Maps),它是 Java 在搜索时提高性能的一种方式,我不知道您是否知道如何使用 Collections 框架!但他们是这样工作的
当您尝试在集合中搜索对象时,它会开始查找对象的哈希码,当找到匹配项时,它会开始搜索相等的对象
这样,它不会搜索 1000 个对象的集合来尝试将每个对象与您的搜索进行比较,而是搜索哈希码(例如只能是 50 个),然后使用此哈希码搜索对象
关于如何使用 equals() 和 hashCode() 方法有很多规则,但无论如何它们都很容易