Object:所有类的超类

发布于:2025-02-12 ⋅ 阅读:(141) ⋅ 点赞:(0)
定义:所有类的超(父)类。
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才可能一样。

网站公告

今日签到

点亮在社区的每一天
去签到