当前位置: 首页 > 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.yayakq.cn/news/986427/

相关文章:

  • 购物型网站模板食品网站建设 网站定制开发
  • 平泉网站建设客户关系管理系统软件
  • 用墨刀做网站后台原型c2c的典型代表有哪些
  • 中国摄影网站有哪些wordpress建站好吗
  • 网站开发收费标准文档工程网站建设
  • 网站开发公司能不能去儿童摄影设计
  • 任丘网站制作有没有什么好的网站
  • 网站seo快速排名优化的软件培训班线上优化
  • 什么秀网站做效果图满山红网站建设公司
  • 响应式网站检测工具系统管理的主要内容
  • 临沂网站建网站分析软件
  • 淘宝客导购网站商务网页设计与制作答案
  • 物流行业网站源码保定做网站公司
  • 广西柳州网站制作公司在哪个网站做流动补胎的广告好
  • 国内建设地铁的公司网站怎么建网页
  • 广东建设项目备案公示网站网络推广标题技巧
  • 制作图网 专业图片在线制作网站godaddy wordpress 备
  • 网站建设 有限公司搜狗竞价绑定网站要求
  • 高州做网站江西宜春网站建设报价
  • 新公司网站设计注意事项网站开发技术支持
  • wordpress技巧:开启wordpress多站点功能网站建设分享文章
  • 网站系统升级中外贸免费建设网站制作
  • 烟台建网站手机页面制作
  • 站长工具集wordpress多站点内容聚合
  • 惠州做网站 百度优化网站建设合同属于购销吗
  • 网站404页面源码中国空间雷达卫星
  • 网站里的动效怎么做福田网站建设乐云seo
  • 腾讯建设网站视频下载网络产品代理加盟
  • 山东省城乡建设部网站首页wordpress连接微博 破解
  • 中英文网站建设企业搜素引擎优化