Object类的常用方法

1.clone方法:
实现对象的浅复制,只有object的子类实现了cloneable接口,覆写clone方法,才可以使用super.clone()调用object的该方法,否则抛出CloneNotSupportedException异常。子类中的基本类型和String类型可以实现浅拷贝,引用类型只能使用深拷贝。

2.getClass方法:
final方法,获得运行时的类型信息。

3.toString方法:
返回一个String对象用来标识自己,一般子类都有覆写。

4.wait,wait(long),notify(),notifyAll()方法:
都是在多线程机制下使用的,要求先获得该锁才可能使用,即在synchronized的语句中使用。
wait使当前线程进入等待状态,释放所持有的锁,long是等待的时间间隔,超时了还没被唤醒自动就进入就绪状态。
notify使唤醒当前对象的某个等待线程,该线程进入就绪状态。notifyAll使唤醒当前对象的所有线程,进入就绪状态。
为什么要在synchronized语句内使用?
因为你只有进入该语句,获得该对象的锁,才能调用wait方法,释放,进入等待。notify方法也需要在该语句内使用,因为要唤醒等待池中的某一个线程,就必须获得该线程的监视器,需要在synchronized中才能对其操作。notify只是唤醒,并不一定会重新获得该对象的锁。
参考:详解

5.hashcode和equals方法:
hashCode方法返回一个hash码,对对象进行散列时作为key值输入,要尽可能保证每个对象hash码的不同,这样才能保证散列的存取性能,所以在对象比较中一般需要重写hashCode方法,嵌入自定义的比较方法,例如姓名相同时,年龄不同为不同对象。常与equals方法联用:如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。 如果两个对象不equals,他们的hashcode有可能相等。
如果两个对象hashcode相等,他们不一定equals。 如果两个对象hashcode不相等,他们一定不equals。
equals方法:默认是使用 == 比较两个对象是否是同一个,是对象的地址比较。

 public boolean equals(Object obj) {
        return (this == obj);
    }

而我们常用equals方法来比较两个对象的值是否相等,这时候就需要重写equals方法了。
String重写equals方法,比较两个string对象的值是否相等。

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

即String中equals方法判断相等的步骤是:
1.若A==B 即是同一个String对象 返回true
2.若对比对象是String类型则继续,否则返回false
3.判断A、B长度是否一样,不一样的话返回false
4。逐个字符比较,若有不相等字符,返回false

6.finalize方法用于在垃圾回收前做一些资源关闭的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值