== 和 equals的区别

==
和 equals的区别
在 Java 中,==
和 equals
是用于比较对象的两种不同方式,它们有以下区别:
比较的对象类型:
==
用于比较两个对象的引用是否相同,即判断两个对象是否是同一个对象的引用。equals
用于比较两个对象的内容是否相等,即判断两个对象是否在逻辑上相等。
用途:
==
通常用于比较基本数据类型和对象引用,判断它们是否指向同一块内存地址。equals
通常被重写用于比较对象的内容,判断它们是否相等,这样可以根据对象的业务逻辑进行判定。
默认行为:
对于基本数据类型,
==
比较的是它们的值。对于对象引用,
==
比较的是对象的内存地址。对于
equals
方法,默认行为是比较对象的内存地址,即与==
相同。
在对象类中的实现:
默认情况下,
Object
类中的equals
方法是直接调用==
进行对象引用的比较。一般来说,如果一个类没有重写
equals
方法,那么它继承自Object
的equals
方法将与==
的行为一致。
重写
equals
方法:在自定义类中,通常需要重写
equals
方法,以便根据对象的业务逻辑进行内容比较。重写
equals
方法时,通常需要满足一些约定,如自反性、对称性、传递性、一致性和非空性等。
@Override public boolean equals(Object obj) { if (this == obj) { return true; // 同一对象引用,内容一定相等 } if (obj == null || getClass() != obj.getClass()) { return false; // 类型不同或比较对象为 null,则不相等 } // 比较对象的内容逻辑 // ... }
总结:
==
用于比较引用是否相同,即比较对象的内存地址。equals
用于比较内容是否相等,通常需要在自定义类中进行重写。