面试:Object方法有哪些?

2020-04-27  本文已影响0人  Android_冯星
image.png

registerNatives

getClass()

可以返回这个实体的Class对象,可以用来获得这个类的元数据。在反射中经常使用。

clone方法

被用来拷贝一个新对象。在Java中使用等号只是拷贝对象的引用并不是对象,需要拷贝对象的时候,可以借助clone方法。

toString方法

toString提供对象的字符串表示形式。

类Object的默认toString()方法返回一个字符串,该字符串包括该对象的类名称,"@"字符以及该对象的哈希码的无符号十六进制表示形式。

例如:
Student@4554617c

hashCode方法

hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。

对于每个对象,JVM都会生成一个唯一的数字,即哈希码。它为不同的对象返回不同的整数。
针对上面的toString方法的演示代码中,添加一个hashcode方法,指定对象的哈希码。

@Override
    public int hashCode() {
        return 200;
    }

打印的结果将为:

Student@c8

其中c8是16进制表示,转化为10进制就是12 * 16 + 8 = 200,正好是hashcode的返回值。

equals方法

被用来比较两个对象是否相等。在重写equals的时候也需要重写hashCode方法。

HashMap和Hashset中判断两个对象是否相等,首先比较hashCode,如果hashCode相等才回执行equals方法。

finalize方法

这个方法在垃圾回收之前被执行,可以通过重写finalize方法来重置系统资源,执行清理活动并且最大程度的减少内存泄露。

wait方法

调用线程放弃锁并且进入睡眠状态,直到其他线程进入同一个monitor并且执行notify唤醒线程。

notify,notifyAll 方法

和wait相反,用于唤醒线程。

衍生的面试题

为什么重写了equals就必须重写hashCode

equals()相等的两个对象,hashcode()一定相等;

equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。
换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。(我的理解是由于哈希码在生成的时候产生冲突造成的)。

wait()方法与sleep()方法的区别

equals() 的作用是什么?

equals() 的作用是 用来判断两个对象是否相等。

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

既然Object.java中定义了equals()方法,这就意味着所有的Java类都实现了equals()方法,所有的类都可以通过equals()去比较两个对象是否相等。 但是,我们已经说过,使用默认的“equals()”方法,等价于“==”方法。因此,我们通常会重写equals()方法:若两个对象的内容相等,则equals()方法返回true;否则,返回fasle。

下面根据“类是否覆盖equals()方法”,将它分为2类。

equals() 与 == 的区别是什么?

==
equals() :

在Object类中,equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象。

但是一般像String就重写了equels方法,重写规则:

equals 重写原则

对象内容的比较才是设计equals()的真正目的,Java语言对equals()的要求如下,这些要求是重写该方法时必须遵循的:

任何情况下,x.equals(null)【应使用关系比较符 ==】,永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”

hashCode() 和 equals()

hashcode是系统用来快速检索对象而使用

上一篇下一篇

猜你喜欢

热点阅读