corejava学习----------------Object类中常用方法介绍

Object中常用方法的重写:

一、equals():两个对象比较原则

    讲equals前首先要讲讲equals和==的区别;
    (1)==在比较基本数据类型时,比较的是值;在比较引用数据类型时比较的是地址值;
    (2)equals是用于两个对象之间的比较;当所比较的类类型没有对equals进行重写的时候,会使用Object中的equals方法进行比较,这时比较的是地址值;当所比较的类类型对equals进行了重写,比较规则使用的是自定义的比较规则。
             字符串类型的可以直接使用equals进行比较,String类是对equals进行重写了的,字符串的比较规则采用的是将字符串分割成字符数组,再拿着一个个的字符进行对比,如果全部相等则返回true,否则返回false。

 

 二、hashCode():

Object类中的hashCode()方法会根据new出的不同的对象产生一个hashCode值,但是如果对hashCode()方法进行重写了就会根据自定义的方式产生一个hashCode值

 

三、toString():

默认打印一个对象的时候,实际并不是这个对象本身而是调用完toString返回的字符串

 

四、 getClass():

Object类中的方法,所以,在每一个java类中,都会有这个方法,并且这个方式final修饰的,不能被子类重写,这个方法可以返回某一个引用在运行的时候指向对象的类型

        例如:Person p = new Student() 
            //会输出:class com.briup.chap06.Student
            //说明这个引用p在运行时指向的是Student这个类的对象
            //注意这个引用p的类型是Person的(多态)
             System.out.println(p.getClass());

 

【重点】

一、如何对hashCode和equals进行重写?
    1.没有对hashCode方法进行重写的类,每new一个对象的时候Object类中的hashCode()方法产生的hashCode值都是不一样的,它会根据这个对象的地址值产生一个int类型的哈希码;
    当对hashCode进行重写完之后就会根据你重写规则产生哈希码。
    2.没有对equals进行重写时,使用equals方法对比两个对象就会调用Object类中的equals()方法对比两个对象,实际上就是对比两个对象的地址值;
    当对equals进行重写完之后就会根据你重写的规则进行两个对象的对比。

 

二、为什么加入HashSet集合中的对象重写了equals方法之后还要重写hashCode方法?
    1.因为每new一个对象在hashCode不重写的情况下,Object类会根据对象的地址值产生一个int类型的哈希码,而equals方法在不重写的情况下对比的是两个对象的地址值
    2.如果重写了equals方法,当此方法被重写时,通常有必要重写hashCode方法,为了保证相等的对象必须要有相等的哈希码。
    3.HashSet集合实现添加的对象都不重复的方式;
    添加进集合的对象都是重写了hashCode方法和equals方法的,hashCode方法主要功能是提高对比的效率,在hashCode相同的情况下再使用equals进行对比,如果返回false则说明该集合中没有该对象,可以将该对象添加到集合中去;(hashCode值相同的两个对象,不一定是同一个对象。两个对象如果是同一个对象,hashCode值一定相同。)
    如果对比hashCode值不相同就可以直接将该对象添加到集合中去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值