Object类是Java中所有类的超类,每个类都是由它扩展而来的,但不需要这样写:
如果没有明确指出超类,Object就被认为是这个类的超类,可以使用Object类型的变量引用任何类型的对象:
在Java中,只有8种基本类型不是对象。所有数组类型,不管是对象数组还是基本类型数组都扩展成了Object类。
equals方法
Object类中的equals方法用于检测一个对象是否等于另一个对象。在Object类中,这个方法将判断两个对象是否具有相同的引用。
在子类中定义equals方法时,首先调用超类的equals。如果检测失败,对象就不可能像等。如果超类中的域都像等,就需要比较子类中的实例域。
Java语言规范要求equals方法具备以下特性:
- 自反性
- 对称性
- 传递性
- 一致性
- 对于任意非空引用x,
x.equals(null)
都应该返回false
hashCode方法
散列码(hash code)是由对象导出的一个整型值。散列码事没有规律的。如果x和y是两个不同的对象,x.hashCode()
和y.hashCode()
基本上不会相同。
由于hashCode方法定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址。来看下面例子:
运行结果如图:
大专栏 Java-Object类b.io/Object-001.jpg" alt=""/>
字符串str1和str2拥有相同的散列码,这是因为字符串的散列码是由内容导出的。而字符缓冲strb1和strb2有着不同的散列码,是因为在StringBuffer类中没有定义hashCode方法,它的散列码是由Object类的默认方法到处的对象存储地址。
如果重新定义了equals方法就必须重新定义hashCode方法。
toString方法
用于取得对象信息,返回表示对象值的字符串,在子类中可重写这个方法。
对于数组,需要调用静态方法Arrays.toString()
。
运行结果如图: