Objects

Object类

介绍:

  • 所有的类,都直接或者间接的继承了 Object 类 (祖宗类)

  • Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法。

常用方法:

方法名说明
public String toString() 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
public Boolean equals(Object o) 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false

5.2.1toString

方法名说明
public String toString() 默认是返回当前对象在堆内存中的地址信息:类的全类名@十六进制哈希值

当我们打印对象名的时候, println() 源码中会自动调用对象的toString方法。

public static String valueOf(Object obj) {
   return (obj == null) ? "null" :obj.toString();
}

Object类toString方法的源码:

public String toString() {
  return getClass().getName() +
      "@" + Integer.toHexString(hashCode());
}

解释:对象的全类名@十六进制哈希值

哈希值 = 对象的值 + 哈希算法, 常被人称作地址值

toString存在的意义:

  • 父类 toString() 方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息。

  • 返回对象的属性信息(成员变量的值), 便于调试操作。

  • 今后打印某一个对象的名字, 看到的不是地址值, 就说明该类重写过toString方法。

5.2.2equals

方法名说明
public boolean equals(Object o) 默认是比较当前对象与另一个对象的地址是否相同相同返回true,不同返回false
//Object类中equals的源代码
public boolean equals(Object obj) {
       return (this == obj);
  }

 

父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则

//如下,就是在类中重写equals方法
//stu1.equals(stu2)
//o:stu2对象
public boolean equals(Object o) {
       //如果地址相同则直接返回true
       if (this == o) return true;
       //如果stu2是null或stu1和stu2的类型不相同(这里直接用他们的.class文件进行比较),则直接返回false
       if (o == null || getClass() != o.getClass()) return false;
       //由于接收的是Object对象,而其没有age属性,所以需要强制转化
       Student student = (Student) o;
       return age == student.age && Objects.equals(name, student.name);
  }

 

使用此方法比较,如stu1.equals(stu2)时,如果stu1为null,则会出现空指针异常

 

Objects

Objects类与 Object 还是继承关系,Objects类是从JDK 1.7开始之后才有的。

方法名说明
public static boolean equals(Object a, Object b) 比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较
public static boolean isNull(Object obj) 判断变量是否为 null

equals

使用方法

Object.equals(对象1,对象2);

源码分析

public static boolean equals(Object a, Object b) {
   //先比价a,b地址是否相同,相同则||右边短路,返回true
   //不同则在判断a是否为null,如果是则&&右边短路,返回false
   //不是在调用equals方法比较,返回方法的返回值
   return (a == b) || (a != null && a.equals(b));
}

 

接口是否继承了Object?

接口表面上不能继承Object,但底层继承了Object

posted @   灵泽pro  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示