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