如何自己搭建一个个人网站,wordpress旧版本哪个好些,Wordpress主题上传PHP值,网络公司经营范围能写建材吗两个对象的hashCode()相同时#xff0c;equals()相等吗#xff1f;_两个对象的hashcode一样,equal一样么_不想当个程序员的博客-CSDN博客
equals()#xff1a;比较的是非基本类型的数据的引用地址#xff08;即内存地址#xff09;是否相同#xff0c;但是对于重写equal…两个对象的hashCode()相同时equals()相等吗_两个对象的hashcode一样,equal一样么_不想当个程序员的博客-CSDN博客
equals()比较的是非基本类型的数据的引用地址即内存地址是否相同但是对于重写equals方法的类型比较的是对象内容是否相同。 hashCode()计算对象实例的哈希码用于返回字符串的哈希码。其中哈希码使用散列表也叫哈希表存储的。但是因为哈希表存储的Hash散列值时可能存在有冲突的情况因此两个对象的equals()可能不同虽然概率很低。 因此在比较两个对象是否相等的时候单单比较两个对象的hashCode是否相等是不可以的。 hashCode()方法是获取一串整数我们称之为哈希码。默认情况下是Object类里面的一个native方法由jvm实现其作用是标识一个唯一的对象注意这个hash码在无锁状态下存储于对象头中 equals()方法是比较两个对象是否相等。默认情况下比较两个对象的在内存的地址值和等价。不过我们一般都会重写这个方法来达到我们想要的对象相等的效果。 这两个方法一个标识唯一对象一个标识对象内存地址描述两个不同维度信息好像没有什么关系 目前为止确实是这样但是在Map实现类中计算hash值的扰动函数是依赖hashcode如果只重写equals的话那么会导致相同对象的生成的key值不一样具体现象如下 所以需要重写一般重写equals的时候都会要求重写hashCode方法避免出现这样的bug。 总结hashCode和equals没有什么关系不过一般重写equals的时候会强制要求重写hashCode避免出bug。 原则
1.同一个对象没有发生过修改无论何时调用hashCode()得到的返回值必须一样。 如果一个key对象在put的时候调用hashCode()决定了存放的位置而在get的时候调用hashCode()得到了不一样的返回值这个值映射到了一个和原来不一样的地方那么肯定就找不到原来那个键值对了。
2.hashCode()的返回值相等的对象不一定相等通过hashCode()和equals()必须能唯一确定一个对象。不相等的对象的hashCode()的结果可以相等。hashCode()在注意关注碰撞问题的时候也要关注生成速度问题完美hash不现实。
3.一旦重写了equals()函数重写equals的时候还要注意要满足自反性、对称性、传递性、一致性就必须重写hashCode()函数。而且hashCode()的生成哈希值的依据应该是equals()中用来比较是否相等的字段。
如果两个由equals()规定相等的对象生成的hashCode不等对于hashMap来说他们很可能分别映射到不同位置没有调用equals()比较是否相等的机会两个实际上相等的对象可能被插入不同位置出现错误。其他一些基于哈希方法的集合类可能也会有这个问题 String类 equals方法的定义 知识点来源 【基础】和equals_哔哩哔哩_bilibili【2023年面试】hashcode和equals如何使用_哔哩哔哩_bilibilihttps://baijiahao.baidu.com/s?id1732729842132154711wfrspiderforpc面试高频说说hashCode() 和 equals() 之间的关系 - 知乎