Object
类中equals()
方法的默认实现- 在Java中,所有的类都直接或间接继承自
Object
类。Object
类中的equals()
方法默认实现是比较两个对象的引用是否相同。 - 代码示例:
class MyClass{ // 这里没有重写equals方法,使用Object类的默认equals方法 } public class Main { public static void main(String[] args) { MyClass obj1 = new MyClass(); MyClass obj2 = new MyClass(); MyClass obj3 = obj1; System.out.println(obj1.equals(obj2)); // false,因为obj1和obj2是不同的对象引用 System.out.println(obj1.equals(obj3)); // true,因为obj3和obj1指向同一个对象 } }
- 这意味着在没有重写
equals()
方法的情况下,equals()
方法的行为和==
操作符类似,都是比较两个对象的内存地址是否相同。
- 在Java中,所有的类都直接或间接继承自
Object
类中hashCode()
方法的默认实现Object
类中的hashCode()
方法返回对象的一个哈希码,这个哈希码是根据对象的内存地址计算出来的(不同的JVM实现可能会有所不同,但通常与内存地址有关)。- 示例代码:
class MyClass{ // 这里没有重写hashCode方法,使用Object类的默认hashCode方法 } public class Main { public static void main(String[] args) { MyClass obj1 = new MyClass(); MyClass obj2 = new MyClass(); System.out.println(obj1.hashCode()); System.out.println(obj2.hashCode()); // 一般情况下,obj1和obj2的hashCode不同,因为它们是不同的对象引用,具有不同的内存地址 } }
- 由于默认的
hashCode()
方法是基于对象的内存地址,所以不同的对象通常会有不同的哈希码,但这并不是绝对的,在某些特殊情况下,不同对象可能会有相同的默认哈希码(虽然这种情况很少见)。
如果要根据对象的内容而不是内存地址来比较对象是否相等或者确定哈希码,就需要在自定义类中重写equals()
和hashCode()
方法。