Object类是所有类的父类,这意味着所有类都会具有Object类里面的方法
它里面有11个方法:
- //用于返回当前运行时对象的 Class 对象,使用了 final 关键字修饰,故不允许子类重写
- public final native Class getClass()
-
- //用于返回对象的哈希码
- public native int hashCode()
-
- //用于比较 2 个对象的内存地址是否相等,String 类对该方法进行了重写以用于比较字符串的值是否相等
- public boolean equals(Object obj)
-
- //用于创建并返回当前对象的一份拷贝
- protected native Object clone() throws CloneNotSupportedException
-
- //返回类的名字实例的哈希码的 16 进制的字符串。建议 Object 所有的子类都重写这个方法。
- public String toString()
-
- //final方法不能重写。唤醒一个正在等待的线程,如果有多个线程在等待只会任意唤醒一个
- public final native void notify()
-
- //native 方法,并且不能重写。跟 notify 一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程
- public final native void notifyAll()
-
- //final方法,所以不能重写。暂停线程的执行。注意:sleep 方法没有释放锁,而 wait 方法释放了锁 //timeout 是等待时间
- public final native void wait(long timeout) throws InterruptedException
-
- //多了 nanos 参数,这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)。所以超时的时间还
- //需要加上 nanos 毫秒
- public final void wait(long timeout, int nanos) throws InterruptedException
-
- //跟之前的2个wait方法一样,只不过该方法一直等待,没有超时时间这个概念
- public final void wait() throws InterruptedException
-
- //实例被垃圾回收器回收的时候触发的操作
- protected void finalize() throws Throwable { }
Object类中的equals方法比较的是对象的内存地址
String类中的equals方法重写了,比较的是对象的值(只要值相等即可,不用内存地址相同)
Object类中的equals方法:
- public boolean equals(Object obj)
- {
- return (this == obj);
- }
String类中的equals方法
- @Override
- public boolean equals(Object anObject)
- {
- if (this == anObject)
- {
- return true;
- }
- if (anObject instanceof String) {
- String anotherString = (String)anObject;
- int n = value.length;
- if (n == anotherString.value.length) {
- char v1[] = value;
- char v2[] = anotherString.value;
- int i = 0;
- while (n-- != 0) {
- if (v1[i] != v2[i])
- return false;
- i++;
- }
- return true;
- }
- }
- return false;
- }
hashcode()方法返回的是一个整数,叫做哈希码或者散列码
所以说每个对象都有一个哈希值
相等的两个对象散列值一定相等,但是散列值相同的两个对象不一定相等
对象加入到HashSet中的过程:
将对象加入HashSet的时候,HashSet会计算出对象的hashcode值,以此来判断对象加入的位置,
同时会和其他已经加入的对象的hashcode值作比较,
如果没有相等的hashcode值,HashSet会假设这个对象之前没有出现过
如果有相等的hashcode值,HashSet会通过equals方法来进一步判断这两个hashcode值相等的对象是否真的相同(这样可以大大减少equals的次数,大大提高执行速度,也就是说有了hashcode方法,判断元素是否在容器内的效率会更高)
总结:
对象相等,哈希值一定相等,而且equals()方法比较这两个对象返回结果是true
如果两个对象哈希值相等,两个对象不一定相等
如果两个对象哈希值不相等,两个对象一定不相等
其他方法:
3.toString()方法:返回值的形式是类名@这个对象的散列码的无符号十六进制表示

4.clone()方法