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

电商网站开发文档游戏代理免费加盟

电商网站开发文档,游戏代理免费加盟,wordpress 加密查看,中文版本wordpress1.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.hkea.cn/news/671289/

相关文章:

  • 新闻类网站源码青岛官网seo
  • 网站优化哪里可以做百度营销客户端
  • 常德建设局网站北京优化网站方法
  • 用ip做网站优化手机流畅度的软件
  • 为网站添加统计媒介
  • 商业设计网站推荐互联网营销师证书是国家认可的吗
  • 做网站的是干嘛的怎样把自己的产品放到网上销售
  • 品牌型网站制作价格2022年小学生新闻摘抄十条
  • 政府网站群集约化建设网络暴力事件
  • 可以做卷子的网站游戏app拉新平台
  • 长沙优化网站关键词社区营销
  • 个人网站制作价格表重庆关键词优化
  • 网站开发ideseo优化网站模板
  • 关于制作网站收费标准怎样把个人介绍放到百度
  • 网站建设 绵阳百度开放平台
  • discuz修改网站标题微信小程序开发平台
  • 怎么做国内网站吗seo顾问培训
  • 网站排名不稳定怎么办seo+网站排名
  • 做网站要淘宝热搜关键词排行榜
  • 做网站 创业 流程网络建站流程
  • 怎么做购物网站系统文本广州网络营销推广
  • 网站后台管理系统cms推广seo网站
  • 企业网站备案注销百度推广登陆平台
  • 重庆如何软件网站推广网站优化seo
  • 最专业的佛山网站建设价格3小时百度收录新站方法
  • wordpress门户建站html网页完整代码作业
  • 子域名 做单独的网站广州seo外包公司
  • 凡科建设网站的步骤永久免费无代码开发平台网站
  • 建设一个百度百科类网站网站排名优化的技巧
  • 自己做网站可以吗淄博做网站的公司