Object类中的方法及其作用

Object类有12个成员方法,按照用途可以分为以下几种 

1,构造函数 
2,hashCode和equale函数用来判断对象是否相同, 
3,wait(),wait(long),wait(long,int),notify(),notifyAll() 
4,toString()返回该对象的字符串表示,一般需要重写和getClass() 返回一个对象的运行时类,获得类型的信息,与java反射机制相关
5,clone()  创建并返回此对象的一个副本(复制对象)
6,finalize()用于在垃圾回收,  当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法,该方法用于释放资源。
有以下疑问:

   1、为什么要重写equals()方法?
    因为Object类中定义的equals()方法是用来比较两个引用所指向的对象的内存地址是否一致。
    源码:
    public boolean equals(Object obj) {
        return (this == obj);
    }
     ("=="两边是基本类型比较的是内容,"=="两边是引用类型(class)比较的是否对同一对象的引用,即比较两个引用所指向的对象的内存地址是否一致。)
    而我们经常会希望两个不同对象的某些属性值相同时,就认为它们相同。所以我们要重新equals()方法。
   2、为什么要重写hashCode()方法?
   需要注意的是:
    a、在java应用程序运行时,无论何时多次调用同一个对象时的hashCode()方法,这个对象的hashCode()方法的返回值必须是相同的一个int值
    b、如果两个对象equals()返回值为true,则它们的hashCode()也必须返回相同的int值
    c、如果两个对象equals()返回值为false,则它们的hashCode()返回值也必须不同
    由于hashCode方法定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址。如果重新定义equals方法,就必须重新定义hashCode方法,以便用户可以将对象插入到散列表中。(要保证上面所述b,c原则)
hashCode稍微理解下下
hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。
hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。
        虽然,每个Java类都包含hashCode() 函数。但是,仅仅当创建并某个“类的散列表”(关于“散列表”见下面说明)时,该类的hashCode() 才有用(作用是:确定该类的每一个对象在散列表中的位置;其它情况下(例如,创建类的单个对象,或者创建类的对象数组等等),类的hashCode() 没有作用。
       上面的散列表,指的是:Java集合中本质是散列表的类,如HashMap,Hashtable,HashSet。
       也就是说:hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
下面,我们以HashSet为例,来深入说明hashCode()的作用。
        假设,HashSet中已经有1000个元素。当插入第1001个元素时,需要怎么处理?因为HashSet是Set集合,它允许有重复元素。
        “将第1001个元素逐个的和前面1000个元素进行比较”?显然,这个效率是相等低下的。散列表很好的解决了这个问题,它根据元素的散列码计算出元素在散列表中的位置,然后将元素插入该位置即可。对于相同的元素,自然是只保存了一个。
                              由此可知,若两个元素相等,它们的散列码一定相等;但反过来确不一定。在散列表中,
                           1、如果两个对象相等,那么它们的hashCode()值一定要相同;
                           2、如果两个对象hashCode()相等,它们并不一定相等。

                           注意:这是在散列表中的情况。在非散列表中一定如此!

(如有雷同,是我吵你的)



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值