尽管经常使用equals,也可能理解不一定神,最近又要使用Collections.sort看到了这些,总结的不错. 首先equals方法必须满足自反性.对称性.传递性和一致性. 自反性(x.equals(x)必须返回true). 对称性(x.equals(y)返回true时,y.equals(x)也必须返回true). 传递性(x.equals(y)和y.equals(z)都返回true时,x.equals(z)也必须返回true) 和一致性(当x和y引用的对象信息没有被修改时,多次调用x.eq…
package com.wangzhu.map; import java.util.HashMap; /** * hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,<br/> * 这样的散列集合包括HashSet.HashMap以及HashTable.<br/> * 能否可以直接根据hashCode值判断两个对象是否相等呢?<br/> * 答案:肯定是不可以的,因为不同的对象可能会生成相同的hashCode值.<br/> * 虽然不能根据h…
自己学到这,就记录了下来,代码都是自己敲得,有不对的地方希望大神指点出来 为什么重写 equals 方法 必须重写 hashCode 如果你重写了equals,比如说是基于对象的内容实现的,而不重写 HashCode,那么很可能某两个对象明明是“相等”,而hashCode却不一样.那么就会返回 false.例如在 HashSet 集合中,不允许存在相同元素,但是当你 new 两个对象,对象内容相同时,在 HashSet 集合中就存在了相同的两个元素,如何解决这个问题?那就要重写 equals 方…
一 :string类型的==和equals的区别: 结论:"=="是判断两个字符串的内存地址是否相等,equals是比较两个字符串的值是否相等,具体就不做扩展了,有兴趣的同学可以去查看相关的博客. String s1 = new String("java"); String s2 = new String("java"); System.out.println(s1==s2); //false System.out.println(s1.equa…
 使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals() hashcode()和equals()都继承于object,在Object类中的定义为: equals()方法在Object类中的定义: public boolean equals(Object obj){     return (this == obj); } equals()的定义为: public native int hashCode(); 是一个本地方法,返回的对象的地址值.  1.hash…
1 equals方法 Object类中默认的实现方式是  :   return this == obj  .那就是说,只有this 和 obj引用同一个对象,才会返回true. 而我们往往需要用equals来判断 2个对象是否等价,而非验证他们的唯一性.这样我们在实现自己的类时,就要重写equals. 按照约定,equals要满足以下规则. 自反性:  x.equals(x) 一定是true 对null:  x.equals(null) 一定是false 对称性:  x.equals(y)  和…
以下内容总结自<Effective Java>. 1.何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念). 2.设计equals() [1]使用instanceof操作符检查“实参是否为正确的类型”. [2]对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值. [2.1]对于非float和double类型的原语类型域,使用==比较: [2.2]对于对象引用域,递归调用equals方法: [2.3]对于float域,使用Float.float…
java编程里有关约定:如果两个对象根据equals方法比较是相等的,那么调用这两个对象的任意一个hashcode方法都必须产生相同的结果. hashcode()和equals()都继承于object,在Object类中的定义为: equals()方法在Object类中的定义: public boolean equals(Object obj){     return (this == obj); } hashCode()的定义为: public native int hashCode(); 是…
一.equals方法和hashcode的关系 根据Object.hashCode的通用约定: 如果两个对象相同(equals方法返回true),那么hashcode也相等.(图1) 如果两个对象的hashcode相等,这两个对象不一定相同,因为可能发生了hash冲突.(图2) 啥是hash冲突呢? 举个例子:下图的hash算法为   hashcode = num % 4: 图1 看上图,如果有两个对象都是13(意思也就是指向了同一个对象,那它们的hashcode当然也是相等的啦),所以hashc…
目录 equals常见面试题 为什么要重写equals 重写equals不重写hashCode会存在什么问题 总结 equals常见面试题 在开始聊之前,我们先看几个常见的面试题,看看你能不能都回答上来. 1.equals和==有什么区别? 2.hashcode相等的两个对象一定==相等吗?equals相等吗? 3.两个对象用equals比较相等,那它们的hashcode相等吗? 如果我们不重写equals和hashcode,那么它使用的是Object方法的实现.我们先简单看一下 public…