2023年1月6号复盘
Object类的常用方法
1.getClass方法——获取该对象的真实类型
2.toString方法——用于返回对象的内存地址(一般会重写)
Alt+insert重写toString方法——>new对象给属性赋值——输出该对象输出的不再是内存地址,而是该对象具体的内容
3.hashCode方法——>获取对象的十进制哈希值,用来区分对象,哈希值不能作为比较两个对象的唯一依据,因为存在出现哈希冲突的可能。
4.equals方法——>默认比较的是内存地址,如果不希望比较两对象的内存地址,可以重写equals方法(alt+insert)——>比较的就是具体内容了
ps:String类型的字符串已经默认重写了equals方法,比较的就是具体内容
5.equals方法 和==区别
equals方法和==默认比较的是内存地址,但equals方法可以重写,String类是默认重写过equals方法的,String类型的对象比较的是对象的具体内容,而==单纯的比的是内存地址。
6.为什么在重写equals方法的同时要重写hashCode方法?
hashCode默认是对堆上的对象产生独特值,也就是针对内存地址唯一。如果没有重写 hashCode ,则该 class 的两个对象即使内容相同hashCode也不会相等,如果你重写了equals方法,两个对象的equals方法的比较是true的需求下,我们将数据放入的hashSet当中,却没有去重成功。其原因就是在于,hashSet的本质是通过hashCode方法来进行去重,这也就导致了从hashSet角度去看这命名是两个对象,就是不重复的元素,所以根本就是不用去重。可是从用户的角度去看,你hashSet怎么能够存储两个一模一样的对象,毕竟输出就是相同的呀,就会产生bug,所以重写equals的同时也要重写hashCode。
7.hashSet去重原理
如果hash值一样,再比equals,
如果hash值不一样,对象就不一样,就不需要比了。