栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我们需要重写java中的equals和hashcode以及为什么不能使用Object类实现

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我们需要重写java中的equals和hashcode以及为什么不能使用Object类实现

对象的equals / hashpre实现很好-如果您希望“引用身份”作为相等性。换句话说,一个对象总是会比较等于自己,但不同于另一个对象。

但是,如果希望两个不同的对象相等,则必须重写该方法以 说明 它们应 如何 相等(然后重写哈希码以使其与之保持一致)。

最简单的示例可能是String。两个具有相同字符的不同字符串相等,这对于它们相等非常 有用

String x = new String(new char[]{'a', 'b', 'c'});String y = new String(new char[]{'a', 'b', 'c'});System.out.println(x.equals(y)); // Prints true

现在将其与

FileInputStream
-什么会使两个FileInputStreams相等?如果他们正在读取同一文件?文件中的位置呢?两个流到具有相同内容的不同文件的流又如何呢?问这个问题,IMO真的没有多大意义。

现在,

Object
实现如何知道所需的行为
FileInputStream
和之间的区别
String
?它 可能
会注意到添加到字段,属性和类型本身的注释,可能会自动生成适当的字节码,然后可以对其进行JIT编译……但是,当然Java早在可用注释之前就出现了。当前的方法非常简单-
但这确实意味着,如果要为不同的对象实现值相等,则需要自己编写代码。

需要注意的一点是,对于不可变类型,通常通常更容易考虑相等性-如果两个对象在某个时间点相等,然后在以后不相等,这很奇怪。这也可能会严重破坏哈希表-
哈希码应基本上取决于对象的各个方面,这些方面考虑是否相等,并且在首次将密钥添加到哈希表时记录哈希码;如果您随后 更改
键的内容,则其哈希码将更改,但哈希表将不知道它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453046.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号