前言
Java 中的 Object
类是一个非常基础且重要的类,它是所有类的父类,所有的类(包括用户自定义的类)都是直接或间接继承自 Object
类。这意味着所有的类都可以使用 Object
类中定义的方法,这为我们编写更加通用和灵活的代码提供了基础。
今天,我们将深入探讨以下几个关键知识点:
-
Object
类作为所有类的超类的作用和意义。 -
equals()
方法的定义和使用,以及为什么需要重写equals()
方法。 -
hashCode()
方法的作用及其与equals()
方法的关系,为什么在重写equals()
方法时也必须重写hashCode()
方法。
一、Object
类 —— 所有类的超类
Object
类是 Java 语言的基础类,它位于 java.lang
包中。所有的类,无论它们是直接定义的还是来自第三方库的,都继承自 Object
类。这就好像 Object
类是一个巨大的“容器”,囊括了所有 Java 对象的基本行为和属性。
Object
类中的常用方法
Object
类中定义了许多有用的方法,例如:
-
toString()
:返回对象的字符串表示形式。 -
equals(Object obj)
:用于比较两个对象是否相等。 -
hashCode()
:返回对象的哈希码。 -
clone()
:创建并返回对象的一个副本(需要实现Cloneable
接口)。 -
getClass()
:返回对象的运行时类。
这些方法在默认情况下会有一些基本的行为,但通常情况下,我们可以通过重写这些方法来自定义它们的行为。
二、==
和 equals()
的区别
在 Java 中,==
和 equals()
都可以用来比较两个对象是否“相等”,但它们的含义和使用场景有所不同。
1. ==
的含义和使用场景
-
基本数据类型:
==
用于比较基本数据类型的值是否相等。例如:int a = 10; int b = 10; System.out.println(a == b); // 输出:true
-
引用数据类型:
==
比较的是两个对象的引用是否指向同一个内存地址。例如:String s1 = new String("Hello"); String s2 = new String("Hello"); System.out.println(s1 == s2); // 输出:false
这是因为
s1
和s2
是两个不同的对象,它们的内存地址不同。
2. equals()
的含义和使用场景
-
基本数据类型:
equa