Object类以及Object类中常用方法解读

文章目录

  • Object概述
      • 什么是Object
      • Object的意义
      • Object中的构造方法
  • Java中的常用对象
      • hashCode()方法
      • getClass()方法
      • toString()方法
      • equals()方法



Object概述

什么是Object

Object类位于java.lang包,是所有Java类的顶层父类,t是类层次结构的根类。Java中的每个类都是由这个类扩展而来,所有类都直接或者间接的继承自Object。这意味着我们Java中所有的类后都默认具有“extend Object”字符,代表此类继承与Object类。
在这里插入图片描述
Test类和Test1类都继承于Object顶层父类。

Object的意义

既然Java中所有的类都继承Object,继承的意义就是继承其中的成员方法,Java将许多我们常用的方法都封装在了Object类中,这样我们的其他类都可以直接继承这些方法并且在类中所创建的对象(引用数据类型)可以直接调用这些方法。
比如我们现在创建一个数组“arr”,看看“arr”可以调动哪些方法:
Object类以及Object类中常用方法解读_第1张图片
我们会发现有许多可以调用的方法并不是我们自己创建的成员方法,那意味着这些方法是来自本类所继承的父类,也就是Object。

Object中的构造方法

回想面向对象中说到,子类的构造方法默认访问的是父类中的无参构造,对父类的数据进行初始化,所以Object类中具有默认的无参构造Object()




Java中的常用对象

现在我们了解了如何直接调用Object类中已经封装的功能,那么现在介绍具体的我们常用的几个方法,也就是在Java中开发过程中的常用对象。

hashCode()方法

方法体为public int hashCode()
支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
我们发现hashCode方法返回值类型为int类型,所以我们创建int变量来体现返回值,具体作用的演示:
Object类以及Object类中常用方法解读_第2张图片
在这里插入图片描述

  • hashCode(): 返回一个对象的哈希码值
    意思就是把对象的地址值换算成一个整数值,当两个对象不是同一对象,其地址值不同,哈希码值也不一样。
    Object类以及Object类中常用方法解读_第3张图片
    在这里插入图片描述
    相反,同一对象的哈希码值肯定相同。
    Object类以及Object类中常用方法解读_第4张图片
    在这里插入图片描述

getClass()方法

方法体为public final Class getClass()
当我们类的class文件加载进内存后,JVM 就会为 .class文件创建一个对象。我们可以通过getClass()方法来获取这个对象。
Object类以及Object类中常用方法解读_第5张图片
此时我们调取的就是Test类的Test.class文件的对象。
那么也说明,同一个类创建不同的对象,用这些对象通过getClass()方法调出的对象,其实都是由同一个class文件创建的,他们的地址值以及哈希码值都是一样的。
Object类以及Object类中常用方法解读_第6张图片
在这里插入图片描述

toString()方法

方法体为

public String toString() { //返回值为字符串类型
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

toString()的做作用是返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串表达式。
在这里插入图片描述
在这里插入图片描述
但是通常在我们开发过程中并不会有需要用到这种字符串的情况,所以toString方法我们建议所有子类重写来调用,使其结果是一个简明而且易于读懂的信息表达式。

现在我们定义一个学生类,给予成员变量姓名和年龄:
Object类以及Object类中常用方法解读_第7张图片
我们测试这个类,创建该类对象student,并运用toString方法,运行结果是该对象的字符串形式。
Object类以及Object类中常用方法解读_第8张图片
在这里插入图片描述
我们现在在学生类中重写toString方法,使其返回的不再是对象地址值的字符串形式,而是对象中成员变量的具体内容(toString方法的重写在JDK中可以通过快捷键Alt+Insert实现):
Object类以及Object类中常用方法解读_第9张图片
这时测试类中运行结果就是我们想要的另一种更简单易懂的表达结果:
在这里插入图片描述
toString方法基本上会用到的都是重写后的方法。

equals()方法

方法体为

public boolean equals(Object obj) { //返回值为布尔类型
        return (this == obj);
    }

作用是指示其他某个对象是否与此对象“相等”。,也就是比较两个对象的地址值是否相等,是否为同一对象。如果相等则返回true,不相等则返回false。
Object类以及Object类中常用方法解读_第10张图片
在这里插入图片描述
当然通常,我们比较两个对象是否为一个对象显然毫无意义。所以,我们更多的希望比较两个对象的成员变量值是否一样,一样则返回true,不一样则返回false。所以,我们通常也会对equals方法进行重写。

依然创建一个学生类,给予成员变量姓名和年龄:
Object类以及Object类中常用方法解读_第11张图片
测试这个类,创建两个该类对象student1和student2,并运用equals方法来比较两个对象地址值是否相等:
Object类以及Object类中常用方法解读_第12张图片
在这里插入图片描述
运行结果当然为false,现在我们在学生类中重写equals方法,使其比较的是两个对象的成员变量值是否相等(equals方法的重写在JDK中可以通过快捷键Alt+Insert实现):

  • 第一步,如果两个对象为同一个对象,那么结果当然是true
    在这里插入图片描述
  • 第二步,如果该类对象中并没有成员变量传参,或者两个对象并不是同一个类的的对象(两个对象通过getClass方法导出的class文件不相同),那么比较这两个类将毫无意义,结果当然是false
    Object类以及Object类中常用方法解读_第13张图片
  • 第三步,比较对象中成员变量的值
    Object类以及Object类中常用方法解读_第14张图片
    注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
    所以我们也得到了最终equals方法的重写方式:
    Object类以及Object类中常用方法解读_第15张图片
    重写后,测试类中运行结果就是我们想要的比较两个对象的成员变量值是否相等:
    Object类以及Object类中常用方法解读_第16张图片
    在这里插入图片描述

你可能感兴趣的:(java开发)