美文网首页
面试:Object方法有哪些?

面试:Object方法有哪些?

作者: Android_冯星 | 来源:发表于2020-04-27 22:47 被阅读0次
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()方法的区别

  • 这两个方法来自不同的类分别是Thread和Object

  • 最主要是sleep方法没有释放锁,而wait方法释放了锁

equals() 的作用是什么?

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

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

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

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

  • (01) 若某个类没有覆盖equals()方法,当它的通过equals()比较两个对象时,实际上是比较两个对象是不是同一个对象。这时,等价于通过“==”去比较这两个对象。
  • (02) 我们可以覆盖类的equals()方法,来让equals()通过其它方式比较两个对象是否相等。通常的做法是:若两个对象的内容相等,则equals()方法返回true;否则,返回fasle。

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

==
  • 若操作数的类型是基本数据类型,则该关系操作符判断的是左右两边操作数的值是否相等
  • 若操作数的类型是引用数据类型,则该关系操作符判断的是左右两边操作数的内存地址是否相同。也就是说,若此时返回true,则该操作符作用的一定是同一个对象
equals() :

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

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

  • 先 比较引用是否相同(是否为同一对象),
  • 再 判断类型是否一致(是否为同一类型),
  • 最后 比较内容是否一致
equals 重写原则

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

  • 对称性: 如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true” ;

  • 自反性: x.equals(x)必须返回是“true” ;

  • 类推性: 如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true” ;

  • 一致性: 如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true” ;

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

hashCode() 和 equals()

  • 原则 1 : 如果 x.equals(y) 返回 “true”,那么 x 和 y 的 hashCode() 必须相等 ;

  • 原则 2 : 如果 x.equals(y) 返回 “false”,那么 x 和 y 的 hashCode() 有可能相等,也有可能不等 ;

  • 原则 3 : 如果 x 和 y 的 hashCode() 不相等,那么 x.equals(y) 一定返回 “false” ;

  • 原则 4 : 一般来讲,equals 这个方法是给用户调用的,而 hashcode 方法一般用户不会去调用 ;

  • 原则 5 : 当一个对象类型作为集合对象的元素时,那么这个对象应该拥有自己的equals()和hashCode()设计,而且要遵守前面所说的几个原则。

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

相关文章

  • 面试:Object方法有哪些?

    registerNatives getClass() 可以返回这个实体的Class对象,可以用来获得这个类的元数据...

  • java基础面试题

    java基础面试常见问题汇总 面向对象的特征有哪些方面? Object类中的方法 ==和equals方法的区别 八...

  • Object有哪些方法?

    1- 反射相关 getClass 2- 线程间通信 notify() notifyAll wait(long ti...

  • Java相关知识(二)

    Object有哪些公用方法? 1.clone()方法:保护方法,实现对象的浅复制,只有实现了Cloneable接口...

  • 面试题记录

    面试题1 js中基础类型和引用类型有哪些,怎么判断(typeof, instaceof, Object.proto...

  • 17.12.06 [转]Object类实现了哪些方法

    Object是所有类的父类,任何类都默认继承Object。Object类到底实现了哪些方法? 1.clone方法 ...

  • Java Object类方法

    Object是所有类的父类,任何类都默认继承Object。Object类到底实现了哪些方法? 1.clone方法保...

  • 一切的起源 - Object

    区分一个Java程序员是初级还是中级最好的方法就是问他Object类中的方法都知道哪些。这个问题我曾经在面试中问过...

  • 面试相关之 Java 基础

    1. Object有哪些公用方法?参考回答:equals(): 和==作用相似hashCode():用于哈希查找,...

  • Java中的Object和Objects

    前言 Java中的所有类最终都继承于Object。那么,Object有何神妙的地方,它都有哪些方法或属性呢? 另外...

网友评论

      本文标题:面试:Object方法有哪些?

      本文链接:https://www.haomeiwen.com/subject/mqxpwhtx.html