在Java中,Object
类是所有类的根类。这意味着每个类都直接或间接地继承自Object
类。因此,Object
类定义了许多常见的方法,这些方法对所有Java对象都是可用的。以下是Object
类的一些常见方法:
-
toString()
- 描述:返回该对象的字符串表示。
- 返回值:字符串(
String
)。 - 默认实现:返回类名@对象的哈希码的无符号十六进制表示。
@Override
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
2.hashCode()
1.描述:返回该对象的哈希码值。
2.返回值:整数(int
)。
3.默认实现:根据对象的内存地址计算哈希码。
public native int hashCode();
3.equals(Object obj)
1.描述:指示其他某个对象是否与此对象“相等”。
2.参数:obj
- 要比较的对象。
3.返回值:布尔值(boolean
)。
4.默认实现:比较对象的引用是否相同(即是否为同一个对象)。
4.getClass()
1.描述:返回对象的运行时类。
2.返回值:Class<?>
对象。
5.clone()
1.描述:创建并返回该对象的一个副本。
2.返回值:对象(Object
)。
3.异常:抛出 CloneNotSupportedException
如果对象的类不支持克隆。
6.notify()
1.描述:唤醒在此对象监视器上等待的单个线程。
2.注意:此方法主要用于多线程编程中的线程间通信
7.notifyAll()
1.描述:唤醒在此对象监视器上等待的所有线程。
2.注意:此方法主要用于多线程编程中的线程间通信。
8.wait()
1.描述:导致当前线程等待,直到另一个线程调用此对象的 notify()
方法或 notifyAll()
方法
- 此方法主要用于多线程编程中的线程间通信。有三种重载形式:
wait()
wait(long timeout)
wait(long timeout, int nanos)
hashCode()作用
以下是 .hashCode()
方法的一些关键点和作用:
-
确定哈希表索引:当对象作为键存储在哈希表中时,哈希码用于确定该对象在表中的索引位置。这有助于快速访问和检索对象。
-
性能优化:哈希表通过减少搜索范围来加快查找速度。哈希码使得哈希表能够直接跳转到可能包含所需对象的桶(bucket)或槽(slot),而不是逐个检查每个元素。
-
与
.equals()
方法的关系:在Java中,如果两个对象根据.equals()
方法被认为是相等的,那么它们的.hashCode()
方法必须返回相同的整数结果。这是哈希表能够正确工作的一个基本要求。如果两个相等的对象返回不同的哈希码,那么哈希表可能无法正确地存储和检索这些对象。 -
一致性:在对象的生命周期中,只要对象的“相等性”信息(即
.equals()
方法的结果)没有改变,那么对该对象调用多次.hashCode()
方法必须始终如一地返回相同的整数。 -
不保证唯一性:哈希码不需要是唯一的。不同的对象可能有相同的哈希码,这被称为哈希冲突。哈希表通过适当的策略(如链地址法或开放地址法)来处理这种情况。
-
自定义实现:如果你创建了一个自定义的类,并且打算将该类的实例用作哈希表的键,那么你可能需要重写
.hashCode()
方法以提供合理的哈希码计算。通常,你还会重写.equals()
方法以确保两个相等的对象具有相同的哈希码。 -
内置类型的哈希码:Java中的许多内置类型(如
String
,Integer
,Double
等)都已经实现了.hashCode()
方法,以提供基于其内容的哈希码。