equals和==区别 ,equals和hashcode区别

“==” :      所比较的是基本数据类型,引用变量是否相等。

“equals”:两个独立对象的内容是否相等。例如字符串的比较用equals

String a = new String("hello");

String b = new String("hello");

所以a和b的“==”返回的是false , 而equals是true;

2.equals相等,则hashcode一定相等,即有相等的对象,则必有相等的哈希码,否则不一定成立。

例如:在不同类的时候,创建不同的对象,但有相同的值,equals方法覆盖时,hashcode方法需要重写保持

一致,所以有相同的hashcode值,但equals是不同的,不同类的实例对象是不同的。

class C{
String ssc = new String("AAAA");
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((ssc == null) ? 0 : ssc.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
C other = (C) obj;
if (ssc == null) {
if (other.ssc != null)
return false;
} else if (!ssc.equals(other.ssc))
return false;
return true;
}

}
class D{
String ssd = new String("AAAA");
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((ssd == null) ? 0 : ssd.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
D other = (D) obj;
if (ssd == null) {
if (other.ssd != null)
return false;
} else if (!ssd.equals(other.ssd))
return false;
return true;
}

}
public class EqualsAndHashCode {
public static void main(String[] args) {

//不同类比较
C c = new C();
D d = new D();

System.out.println("hashcode:"+(c.hashCode() == d.hashCode()));
System.out.println("equals:"+c.equals(d));

}

结果:

hashcode:true
equals:false

原文地址:https://www.cnblogs.com/guoguo001/p/8685199.html

时间: 2024-11-07 22:14:29

equals和==区别 ,equals和hashcode区别的相关文章

==、equals、hashCode区别?

[==.equals().hashCode()区别?] 1)== 运算符用来比较两个变量的值是否相等. 即该运算符用于比较变量对应得内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用"=="运算符. 2)equals 是Object类提供的方法之一. 每一个Java类都继承自Object类,所以每一个对象都具有equals这个方法. Object类中定义的equals(Object)方法是直接使用"=="运算符比较的两个对象,所以在没

equals()和hashCode()区别?

equals()和hashCode()区别? ------------------------------------------------- equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值. hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数.根类Object的 hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的:当然,当对象所对应的类重写了 h

hashcode()和equals()的作用、区别、联系

    介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢? 因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashCode()既然效率这么高为什么还要equal()呢? 因为hashCode()并不是完全可靠,有时候不同的对象他们生成的

为什么equals(Object o)相等,hashCode()必须相等

首先,int hashCode();是为了支持哈希表类的如HashMap,HashTable之类的底层使用了哈希表的类. Java Object规范中int hashCode()方法的约定类容有三个: (1)              只要对象的equals方法所用到的信息没有修改,那么hashCode方法必须始终如一的返回一个同一整数,在同一应用程序中多次执行中,每一次执行可以不一样. (2)              如果两个对象的equals方法想到,那么每一个对象单独调用hashCode

为什么覆写equals必须要覆写hashCode?

============================================= 原文链接: 为什么覆写equals必须要覆写hashCode? 转载请注明出处! ============================================= <Effective java>Chapter Three  Item 9:Always override hashCode when you overried equals. (下载链接: Effective_java(英文版)第

JAVA中重写equals()方法为什么要重写hashcode()方法?

object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码.如下:(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true (2)当obj1.ha

Effective Item 6 - 覆盖equals方法时不要忘记hashCode方法

任何覆盖了equals方法的类都需要覆盖hashCode方法. 忽视这一条将导致类无法与基于散列的数据结构一起正常工作,比如和HashMap.HashSet和Hashtable. 下面是hashCode相关规范: ·在程序执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这个对象调用多少次hashCode,起结果必须始终如一地返回同一个证书. 如果是同一个程序执行多次,每次调用的结果可以不一致. ·如果两个对象根据equals方法比较是相等的,那么两个对象的hashCo

为什么重写equals()方法就必须重写hashCode()方法

hashCode()和equals()保持一致,如果equals方法返回true,那么两个对象的hasCode()返回值必须一样.如果equals方法返回false,hashcode可以不一样,但是这样不利于哈希表的性能,一般我们也不要这样做.重写equals()方法就必须重写hashCode()方法的原因也就显而易见了. 假设两个对象,重写了其equals方法,其相等条件是属性相等,就返回true.如果不重写hashcode方法,其返回的依然是两个对象的内存地址值,必然不相等.这就出现了equ

讲说问题:|和||的区别以及&amp;和&amp;&amp;的区别。2、Java中的数据类型分几类?基本数据类型有哪些?

|和||的区别以及&和&&的区别. |或 为或运算 判断为逻辑或 || 为短路或 只有逻辑判断 当左侧为真不再继续判断 &与 为与运算 判断为逻辑与 &&为短路与 当左侧为假不再继续判断 java中的数据类型分几类? 分为基本数据类型和引用数据类型 基本数据类型有8种 引用数据类型 是指如数组 字符串 集合等 也可以是用户自定义的类型.如Person Phone等 原文地址:https://www.cnblogs.com/qingyundian/p/8416