当前位置: 首页 > news >正文

橙云网站建设百度邮箱登录入口

橙云网站建设,百度邮箱登录入口,南京疫情今天最新情况地址查询,地区性门户网站是什么意思1.equals方法 1.Object类中的equals方法比较的是两个对象的地址(底层原理是 比较的,即比较的是对象的地址) return (this obj);2.基本数据类型的包装类和String类都重写了equals方法。 基本数据类型:比较的是数值的是否相等 …

1.equals方法

1.Object类中的equals方法比较的是两个对象的地址(底层原理是 == 比较的,即比较的是对象的地址)

return (this == obj);

2.基本数据类型的包装类和String类都重写了equals方法。

  1. 基本数据类型:比较的是数值的是否相等
 public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;}
  1. String类型:比较的是两个String的内容
public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}

因此,只看equals方法,equals方法与HashCode没关系。

注意,通常情况下,重写equals方法也要重写hashCode方法,用以保证符合hashCode协议的规范,即:相等的对象需要用相等的hashCode值。因此基本数据类型和String类也重写了hashcode方法(后文会继续深入)

2.Hashcode方法

1.在Object类中,Hashcode表示的是将对象的内存地址进行映射成一个哈希值

public native int hashCode();

2.基本数据类型对应的包装类的HashCode方法,也进行了相应的重写。
Integer :

public static int hashCode(int value) {return value;}

3.在String类中HashCode方法

   //s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]int hash = 0;public int hashCode() {int h = hash;if (h == 0 && value.length > 0) {char val[] = value;for (int i = 0; i < value.length; i++) {h = 31 * h + val[i];}hash = h;}return h;}

3.equals和hashcode的关系

先说结论:

  1. hashcode不同,对应的对象一定不同;hashcode相同,对应的对象也不一定相同(可能存在哈希冲突)
  2. equals相同的对象,hashcode是相同的

【经典问题】
1 为什么重写equals方法时,必须重写hashcode方法?

结论:相同的对象应该有相同的hashcode值,确保数据的一致性

当只重写了equals()而没有重写hashcode(),那么两个对象的hashcode值是从内存地址转化而来,一定不相同。即使是equals的。这就会导致这两个equals的对象被存到了哈希表中不同的位置上,这就违反了key的唯一性。

2.反过来,只重写了hashcode()而没有重写equals(),又会有什么问题?

只重写了hashcode()而没有重写equals(),那么equals()比较的相当于就是内存地址,两次new出来的对象一定是不同的,但如果他们的成员属性的值都相同,那么他们的hashcode就是相同的,会存在同一个链表(或红黑树)中。致命的是,再使用get(key)来获取值时,只要这时传入的key和set(key, value)时使用的key不是同一个对象,即使每个成员属性的值都一样,也不能得到想要的结果,因为这两个key是不equals的,会被当做不同key。

(在使用get()查询元素的时候,集合类也先调key.hashCode()算出数组下标,然后看equals()的结果,但如果没有重写equasl方法就会出现不相等的结果。)

综上所述,Java中的equals()和hashcode()必须同时重写,否则哈希表容器将不能正常工作。

参考链接:
https://blog.csdn.net/a745233700/article/details/83186808

http://www.shuangfujiaoyu.com/news/21001.html

相关文章:

  • 岳阳网站建设百度广告点击一次多少钱
  • 建设网站的知识竞赛seo优化包括
  • 购物网站cookie网络营销培训课程
  • 网站开发需要的资源梅州seo
  • 保定今日头条最新消息seo顾问培训
  • 主页网站怎么建设企业网站seo方案案例
  • 商洛网站建设一个产品的网络营销方案
  • 哈巴河网站制作宁波网站推广排名
  • 新疆企业电子网站建设谷歌推广一年多少钱
  • 免费搭建自己的官网想做seo哪里有培训的
  • 域名持有者个人可以做公司网站seo 优化教程
  • 手机数据线东莞网站建设技术支持百度福州分公司
  • 可以免费发帖的网站项目网
  • 做插画的网站网站开发报价方案
  • 做网站公司叫什么南京百度快速排名优化
  • 响应式网页网站设计引流推广犯法吗
  • 如何查看网站架构什么是关键词广告
  • 平面设计素材网站排行榜前十名个人推广平台
  • 建设局施工许可证网站免费网站java源码大全
  • 宁波做网站的专业公司口碑营销理论
  • 购物网站建设费用浙江seo外包
  • dz论坛做分类网站杭州排名优化公司
  • 一个网站如何挣钱如何做好线上营销
  • 帮忙做文档的网站什么是网站外链
  • 西安网站建设优化班级优化大师免费下载安装
  • 交互式网站设计 深圳微信营销的成功案例
  • 免费做h5的网站宁波seo公司
  • 电子商务网站建设的定义关键词优化报价推荐
  • 企业推广宣传方式商品标题优化
  • 企业网站必须备案seo报告