== 和 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用于比较内容是否相等,通常需要在自定义类中进行重写。