一、==和equals()的区别
首先“==”是关系运算符,equals()是方法。但是同时他们的结果都返回布尔值;
“==”的比较
equals()的比较
- 用户自定义类如果重写了equals(),比较的是内容。
- 用户自定义类如果没有覆盖equals(),将调用父类的equals (比如是Object),而Object的equals的比较是地址(return (this == obj);)
我们进行字符串比较时直接调用equals()方法,是String重写过的。
注意:Object类的==和equals比较的都是地址,作用相同
二、equals()和hashcode()的区别
equals()回顾
Equals()默认情况下不重写的时候调用的时object类的方法,比较的是对象的内存地址
重写的话比较的是具体内容
hashcode()比较
Hashcode()也可以比较两个对象是否一致,而且效率较高,但它有一个致命的缺点,并不是绝对的准确,例如:
- object类中的hashcode()方法,由于每个对象的内存地址不一样,所产生的hash值也不同,比较准确
- String类的hashcode(),根据字符串内容,只要字符串所在的堆空间相同,返回的hash值就相同。不准确。
- Integer类,返回的hash值就是Integer对象里所包含的那个整数的值。Integer a=new Integer(100),Integer b=new Integer(100);返回的hash值一样。
所以说hashcode()方法一般只在集合中使用。
Hashcode的实际使用场合
将对象放入到set集合中,首先要判断对象的hashcode值与集合中已有的任意一个元素是否相等,如果不相等直接放入到集合中,如何相等的话,再通过equals方法判断要放入的对象是否与集合中的任一对象相等,如果不相等,就放入到集合中。
小结:equals相等的两个对象他们的hashcode()值绝对相等,hashcode相等的两个对象他们的equals判断不一定相等。
equals(),==和hashcode()区别
原文:https://www.cnblogs.com/dearnotes/p/12269969.html