Object类位于java.lang包中,是所有Java类的祖先,Java中的每个类都由它扩展而来。

  定义Java类时如果没有显示的指明父类,那么就默认继承了Object类。例如:

  public class Demo{

  //...

  }

  实际上是下面代码的简写形式:

  public class Demo extends Object{

  //...

  }

  在Java中,只有基本类型不是对象,例如数值、字符和布尔型的值都不是对象,所有的数组类型,不管是对象数组还是基本类型数组都是继承自Object类。

  Object类定义了一些有用的方法,由于是根类,这些方法在其他类中都存在,一般是进行了重载或覆盖,实现了各自的具体功能。

  equals()方法

  Object类中的equals()方法用来检测一个对象是否等价于另外一个对象,语法为:

  public boolean equals(Object obj)

  例如:

  obj1.equals(obj2);

  在Java中,数据等价的基本含义是指两个数据的值相等。在通过equals()和“==”进行比较的时候,引用类型数据比较的是引用,即内存地址,基本数据类型比较的是值。

  注意:

  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文档。

  更多技术教程,请关注技术教程网www.jishujc.com