欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

对Java中==和equals的理解

程序员文章站 2024-02-09 17:16:28
...

Java中==和equals的区别

1.==既可以比较基本数据类型,也可以比较引用类型,对于基本类型就是比较值,对于引用类型就是比较内存地址。
2. Equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是= =,我们可以看到String类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。
3. 具体要看这有没有重写Object的hashCode的方法和equals方法来判断。

注:Object类的equals()方法,定义原型如下:

public boolean equals(Object x){
return this == x;
}

equals的重写

以Person为例,何时需要重写equals()?
当一个类有自己特有的"逻辑相等"概念时,当改写equals()的时候,总是要改写hashCode(),根据一个类的equals方法(改写后的)判断后,两个截然不同的实例有可能在逻辑上时相等的,但是,根据Object.hashCode()方法,它们仅仅是两个对象。
因此,违反了"相等的对象必须具有相等的散列码",注:Java中默认有一个对象一致性原则,满足equals()相等时,同时也要满足它的hashCode()值也向相等。
结论:复写equals的方法的时候一般都需要同时复写hashCode方法。