Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来。
定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类。例如:
实际上是下面代码的简写形式:
在Java中,只有基本类型不是对象,例如数值、字符和布尔型的值都不是对象,所有的数组类型,不管是对象数组还是基本类型数组都是继承自 Object 类。
Object 类定义了一些有用的方法,由于是根类,这些方法在其他类中都存在,一般是进行了重载或覆盖,实现了各自的具体功能。
public boolean equals(Object obj)
例如:
在Java中,数据等价的基本含义是指两个数据的值相等。在通过 equals() 和“==”进行比较的时候,引用类型数据比较的是引用,即内存地址,基本数据类型比较的是值。
注意:
hashCode() 方法主要用来在集合中实现快速查找等操作,也可以用于对象的比较。
在 Java 中,对 hashCode 的规定如下:
简单地说:如果两个对象相同,那么它们的 hashCode 值一定要相同;如果两个对象的 hashCode 值相同,它们并不一定相同。在 Java 规范里面规定,一般是覆盖 equals() 方法应该连带覆盖 hashCode() 方法。
public String toString()
返回值是 String 类型,用于描述当前对象的有关信息。Object 类中实现的 toString() 方法是返回当前对象的类型和内存地址信息,但在一些子类(如 String、Date 等)中进行了 重写,也可以根据需要在用户自定义类型中重写 toString() 方法,以返回更适用的信息。
除显式调用对象的 toString() 方法外,在进行 String 与其它类型数据的连接操作时,会自动调用 toString() 方法。
以上几种方法,在Java中是经常用到的,这里仅作简单介绍,让大家对Object类和其他类有所了解,详细说明请参考 Java API 文档。
定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类。例如:
- public class Demo{
- // ...
- }
- public class Demo extends Object{
- // ...
- }
Object 类定义了一些有用的方法,由于是根类,这些方法在其他类中都存在,一般是进行了重载或覆盖,实现了各自的具体功能。
equals() 方法
Object 类中的 equals() 方法用来检测一个对象是否等价于另外一个对象,语法为:public boolean equals(Object obj)
例如:
- obj1.equals(obj2);
注意:
- equals()方法只能比较引用类型,“==”可以比较引用类型及基本类型。
- 当用 equals() 方法进行比较时,对类 File、String、Date 及包装类来说,是比较类型及内容而不考虑引用的是否是同一个实例。
- 用“==”进行比较时,符号两边的数据类型必须一致(可自动转换的数据类型除外),否则编译出错,而用 equals 方法比较的两个数据只要都是引用类型即可。
hashCode() 方法
散列码(hashCode)是按照一定的算法由对象得到的一个数值,散列码没有规律。如果 x 和 y 是不同的对象,x.hashCode() 与 y.hashCode() 基本上不会相同。hashCode() 方法主要用来在集合中实现快速查找等操作,也可以用于对象的比较。
在 Java 中,对 hashCode 的规定如下:
- 在同一个应用程序执行期间,对同一个对象调用 hashCode(),必须返回相同的整数结果——前提是 equals() 所比较的信息都不曾被改动过。至于同一个应用程序在不同执行期所得的调用结果,无需一致。
- 如果两个对象被 equals() 方法视为相等,那么对这两个对象调用 hashCode() 必须获得相同的整数结果。
- 如果两个对象被 equals() 方法视为不相等,那么对这两个对象调用 hashCode() 不必产生不同的整数结果。然而程序员应该意识到,对不同对象产生不同的整数结果,有可能提升hashTable(后面会学到,集合框架中的一个类)的效率。
简单地说:如果两个对象相同,那么它们的 hashCode 值一定要相同;如果两个对象的 hashCode 值相同,它们并不一定相同。在 Java 规范里面规定,一般是覆盖 equals() 方法应该连带覆盖 hashCode() 方法。
toString() 方法
toString() 方法是 Object 类中定义的另一个重要方法,是对象的字符串表现形式,语法为:public String toString()
返回值是 String 类型,用于描述当前对象的有关信息。Object 类中实现的 toString() 方法是返回当前对象的类型和内存地址信息,但在一些子类(如 String、Date 等)中进行了 重写,也可以根据需要在用户自定义类型中重写 toString() 方法,以返回更适用的信息。
除显式调用对象的 toString() 方法外,在进行 String 与其它类型数据的连接操作时,会自动调用 toString() 方法。
以上几种方法,在Java中是经常用到的,这里仅作简单介绍,让大家对Object类和其他类有所了解,详细说明请参考 Java API 文档。