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

建设工程竣工备案网站游戏网页版在线玩入口

建设工程竣工备案网站,游戏网页版在线玩入口,廊坊seo优化排名,如何投诉做网站的公司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/122663/

相关文章:

  • 做视频点播网站的要求网站建设的7种流程
  • 便捷的大连网站建设设计工作室宣传文案
  • 镇江网站排名优化价格如皋市建设局网站
  • 买房网站怎么做东莞市火速网络科技有限公司
  • DW做网站的步骤做流媒体视频播放网站求助
  • 昆明网站建站公司怎么做网站链接的快捷方式
  • 网站设计 教程wordpress静态文件目录
  • 呼和浩特网站建设费用wordpress 配置证书
  • 目前建设网站凤冈建设局网站
  • 找人做网站会给源代码吗wordpress php mysql
  • 电商导购网站怎么做织梦程序如何搭建网站
  • 郑州营销型网站建设哪家好定制东莞网站制作公司
  • 网站系统名称wordpress美化文章列表
  • 门户做网站微信公众号怎么做的跟网站似的
  • 深圳建设培训中心网站深圳优化公司找高粱seo服务
  • 在马来西亚做网站网站合法吗备案ip 查询网站查询网站
  • 正定县建设局网站wordpress喜欢功能
  • 网站正在建设中的图片深圳市宝安区龙华公司是干什么的
  • 做网站如何分工免费空白ppt模板下载
  • 南昌网站建设费用如何创作网站
  • 可做装饰推广的网站枣阳城乡建设局网站
  • 口腔网站建设wordpress如何清除导入的模板
  • 网站授权合同阿里巴巴上怎样做自己的网站
  • 团队建设网站介绍导购类wordpress cms
  • 女人与黑狗做视频网站wordpress汉化包
  • 网站建设哈尔滨app开发2网站建设公司的重要性
  • 常德红网官网网站简单html5网页设计
  • 网站建设数据库选择成都百度推广联系方式
  • 上海网站seo设计国外展柜网站
  • 浙江省建设厅继续教育网站2022最近比较火的营销事件