定义:所有类的超(父)类。
Object有下面几个常用的方法:
- equals():比较内存地址是否指向相同
- getclass():获取类的信息--反射领域
- hashcode 散列码--根据地址生成
- wait -- 线程进入等待状态,让出CPU和锁
- notify -- 唤醒等待的线程
- toString -- 输出对象的类型和内存地址
散列码 -- hash -- 哈希。
散列是什么:一堆数据整体上相对均匀,但细节上比较随机。在空房间撒豆子。
我们重点说明equals()方法和hashCode()方法:
一、equals()
==:基本数据类型只能用==判断值是否相等;
引用数据类型用==判断的是变量所指向的地址是否相同。
equals(): Object类当中的equals()方法还是用的==, 比较变量指向的地址是否相等
equal()方法只能在 引用数据类型当中使用。
public boolean equals(Object obj){
return (this == obj);
}
字符串比较值是否相同用equals(),字符串重写了equals()类。
- 默认的equals:在 Java 中,Object 类的 equals() 方法是所有类的父类方法。默认情况下,它比较的是两个对象的引用是否相同(即它们是否指向同一个内存地址),即判断两个对象是否是同一个实例。
- 字符串的equals:在 Java 中,String 类是继承自 Object 类的,所以它也会有一个 equals() 方法。与 Object 类的默认实现不同,String 类重写了 equals() 方法,并且它比较的是字符串的内容,而不是引用。如果需要判断两个对象是否是同一个实例,则应该使用 == 运算符。
二、hashCode()
它本身其实是一个native方法,它使用c++实现的。
它 将我们的对象地址映射为一个int类型的数据,这样一来我们的对象就能 存储进hash表当中去,很多的话变成红黑树。

三、下面是一些面试重点:
1、重写equals需要注意什么------>需要重写hashcode。
2、子类对象重写equals()为什么要重写hashcode(),一定要重写吗?
跟hashmap有关,如果不使用hashmap则不需要重写hashcode。
equals() 方法后必须重写hashCode()方法,是为了保持hashCode()和equals()之间的约定,避免在使用基于哈希的集合(如HashSet、HashMap等)时出现逻辑错误或数据不一致的问题。
因为equals() 和 hashCode() 方法之间存在一种约定,它们需要保持一致性。使用hashCode()方法的时候我们是在hash表当中进行定位和查询对象。A
如果重写了equals()方法,改变了原来判断对象是否相等的逻辑,那么就会导致hashCode()判断相同的对象,equals()判断不相等,从而产生bug
3、equals和hashcode如何在hashmap中重合使用
hashmap比较key值的时候使用equals进行比较是否重复,存入value的时候需要hashcode确定位置
4、两个不同的对象hashcode是有小概率相同的

5、hashcode如果不同,对象一定不同
根据存储地址生成的hashcode,地址不同hashcode也不同(默认的)。
但是字符串的equals被重写了,它的hashcode也重写了,不与地址绑定了。所以 s 和 t 的hashcode才可能一样。
