equal和hashcode、==

一:

==是运算符,用于比较两个变量是否相等;

equals是Object类的方法,用于比较两个对象是否相等;

hashCode()是Object类的一个方法,返回一个哈希值

二:区别

基本类型比较用==,比较的是他们的。默认下,对象==比较时,比较的是内存地址,如果需要比较对象内容,需要重写equal方法

如果两个对象根据equal()方法比较相等,那么调用这两个对象中任意一个对象的hashCode()方法必须产生相同的哈希值。

如果两个对象根据eqaul()方法比较不相等,那么产生的哈希值不一定相等(碰撞的情况下还是会相等的。)

  有可能两个不相等的对象有相同的hashcode

总结:两个对象相等,必须有相同的hashcode 值,反之不成立

原文地址:https://www.cnblogs.com/hplsharenote/p/9782122.html

时间: 2024-10-30 11:18:20

equal和hashcode、==的相关文章

equal与hashcode的说明

equal与hashcode的说明 要判断两个对象是否相等,需要用equal来判断这两个对象的地址是否完全一样,有些情况判断两个对象是否相等只需要判断这两个对象的value是否相等,所以需要重写equal来实现,例如set容器中,不能有两个相同的对象,所以需要重写对象的equal,但当容器中的对象比较多时,需要对容器中的对象进行线性比较,性能比较低,所以需要重写hashcode,通过散射来直接找到那个对象来进行比较,如果hashcode不同,则这两个对象就不同,如果hashcode相同,则需要比

EqualsBuilder和HashCodeBuilder(重写equal和hashcode)

EqualsBuilder和HashCodeBuilder 自动化hashCode()和equals()  问题产生:当需要自动实现hashCode()和equals()方法  解决方法:使用EqualsBuilder和HashCodeBuilder   使用举例:  import  org.apache.commons.lang.builder.HashCodeBuilder; import  org.apache.commons.lang.builder.EqualsBuilder; pub

关于set<Class>类set集合equal和hashcode复写

最近用到了set类集合,发现达不到"想象"中的去重功效,后来上网查了一下,理解如下: User user1 = new User("xiaoming", "123"); User user2 = new User("xiaoming", "123"); Set<User> users = new HashSet<>(); users.add(user1); users.add(use

Java 中 hashCode 和 equals 方法 小结

转载:http://www.oschina.net/question/82993_75533 hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法. hashcode主要是set集合使用,是用于判断对象是否”可能“相等的快捷办法,以解决大集合的问题.举例来说,如果一个一万个元素的集合加入一个元素,如果是一个新元素,那么必须要equal一万次才能加入.所以采用hashcode,hashcode的思路是如果equal,则ha

Java中hashcode,equals和==

hashcode方法返回该对象的哈希码值. hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过hashCode()找到相应的位置,然后再根据equals()方法判断这个位置上的对象与当前要插入的对象是不是同一个.若两个对象equals相等,但不在一个区间,根本没有机会进行比较,会被认为是不同的对象. 所以,Java对于eqauls方法和hashCode方法是这样规定的: 1.如果两个对象相同,那么

HashCode的作用原理和实例解析-----转载

HashCode定义   (1)HashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,HashCode是用来在散列存储结构中确定对象的存储地址的: (2)如果两个对象相同, equals方法一定返回true,并且这两个对象的HashCode一定相同: (3)如果对象的equals方法被重写,那么对象的HashCode也尽量重写,并且产生HashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点: (4)两个对象的HashCode

谈谈java的hashcode使用场景

hashcode是在Object就已经定义了一个方法,名叫散列码,来看看Object是怎么描述它的 /** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {@link java.util.HashMap}. * <p> * The general contract of {@code

java中的==、equals和hashCode区别

java中==.equals().hashCode()都和对象的比较有关. 关于== ==是容易理解的.java设计java就是要比较两个对象是不是同一个对象. 对于引用变量而言,比较的时候两个引用变量引用的是不是同一个对象,即比较的是两个引用中存储的对象地址是不是一样的. 对于基本数据类型而言,比较的就是两个数据是不是相等,没什么歧义. 由于对于基本数据类型而言,没有方法,所以不存在equal()和hashCode()的问题,下面的讨论都是针对引用类型而言的. 关于equals() 为什么ja

Java中的集合类

集合类 集合类是一种有用的工具类,可以存储数量不等的多个对象,并且可以动态分配大小.Java中的集合类可以分成三大类,分别是Set,List和Map.对应数学上的三个相关概念. set就是数学意义上的集合,元素不可重复出现,元素之间没有顺序.List是有序的集合,因为有顺序,元素可以重复.Map存储key-value对,关键在于映射关系. 在Java中,Set,List和Map都是接口,他们还有一个共同的父接口,Collection.如果我们不使用泛型,所有Collection中的对象都会被当成