Object类的作用

  • 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类。
  • Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法。

toString方法

方法名 说明
public String toString() 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
  • 开发中直接输出对象,默认输出对象的地址其实是毫无意义的
  • 开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息

例如:Student类中有name、sex、age成员变量,则重写toString方法为:

@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", sex='" + sex + '\'' +", age=" + age +'}';}

toString存在的意义

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

equals方法

方法名 说明
public boolean equals(Object o) 父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!
  • 直接比较两个对象的地址是否相同完全可以用 “ == ” 替代equals。
  • 父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则。

例如:Student类中有name、sex、age成员变量,则重写equals方法为:

@Override
public boolean equals(Object o){if (o instanceof Student){  //判断真实类型是否为StudentStudent s = (Student) o; //强转成Student类型便于后续调用成员变量if (this == s)    //地址相同一定相同return true;else if (this.name.equals(s.name) && this.sex.equals(s.sex) && this.age == s.age)//成员变量值要都相同return true;elsereturn false;}elsereturn false;
}
//简化写法
@Override
public boolean equals(Object o){if (o instanceof Student){Student s = (Student) o;return this.name.equals(s.name) && this.sex.equals(s.sex) && this.age == s.age;}elsereturn false;
}
//官方写法
@Overridepublic boolean equals(Object o) {if (this == o) return true;        //地址相同if (o == null || getClass() != o.getClass()) return false;     //地址为空或者二者真实类型不同Student student = (Student) o;     //强转return age == student.age && Objects.equals(name, student.name) && Objects.equals(sex, student.sex);}

Objects

  • Objects类与object还是继承关系,Objects类是从JDK1.7开始之后才有的

官方在进行字符串比较时,没有对象自己的equals方法,而是选择了0bjects的equals方法来比较两个对象。

@Override
public boolean equals(Object o){//1.判断是否是同一个对象比较,如果是返回trueif (this == o) return true;//2.如果o是null返回false  如果o不是学生类型返回false  ...Student !=  ...Pigif (o == null || this.getClass() != o.getClass()) return false;//3.说明o一定是学生类型而且不为nullStudent student = (Student) o;return sex == student.sex && age == student.age && Objects.equals(name, student.name);
}

Objects的equals方法比较的结果是一样的,但是更安全

//官方源码
public static boolean equals(Object a, Object b){//先做了非空校验,避免空指针异常,所以更安全return (a == b) || (a != null && a.equals(b));         //先判断a和b的地址是否相同,不相同则判断a是否为空,不为空之后再和b比较地址
}

Objects的常见方法

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

Object和Objects相关推荐

  1. API:Math、System、Object、Objects、equals、toString、BigDecimal

    API: Application Programming Interface  应用程序接口 简单来说:就是Java已经帮我们写好的接口,直接拿来用即可 api文档--甲骨文官网---下载java-- ...

  2. Object和Objects(java)

    Object和Objects 文章目录 Object和Objects Object Object的构造方法 Object的成员方法 public String toString() public bo ...

  3. Object类Objects类总结

    1.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类就是Object. 如果一个类没有特别指定父类 ...

  4. java中Object和Objects类、toString方法和equals方法介绍

    Object类: Object类位于java.lang包中,lang包下的类无需导包就可以使用,object是Java语言中的根类,即所有类的父类.Object中描述的所有方法其子类都可以使用.在对象 ...

  5. JavaSE----常用类(Object、Objects、Math)

    java.lang.Object类的说明: equals() . toString() . getClass() . hashCode() . clone() . finalize() . wait( ...

  6. Object 和 Objects 的区别

    一.Object 类 如果一个类没有指定父类,默认就是继承 Object 类.Object 类里面共有 11 个方法:经常用到的 equals(),toString() 都是直接使用或者重写 Obje ...

  7. Object和Objects的区别

    Object类 如果一个类没有指定父类,默认就是继承Object类. Object类里面共有11个方法: 经常用到的equals(),toString()都是直接使用或者重写的Object里面的这些方 ...

  8. arrays.sort(._Arrays.hashCode(Object [])与Objects.hash(Object…)

    arrays.sort(. 从JDK 1.5开始 , Arrays类提供了名为" hashCode "的重载static方法. 大多数重载方法都接受特定原始类型的数组,但是Arra ...

  9. Arrays.hashCode(Object [])与Objects.hash(Object…)

    从JDK 1.5开始 , Arrays类提供了名为" hashCode "的重载static方法. 大多数重载方法都接受特定原始类型的数组,但是Arrays.hashCode(Ob ...

最新文章

  1. [Hihocoder 1289] 403 Forbidden (微软2016校园招聘4月在线笔试)
  2. 深耕大数据市场,所问数据打造深度学习数据分析与预测引擎
  3. Vim 80列布局问题
  4. ios 企业签名需要源文件么_苹果企业签名之iOS证书申请和签名文件生成
  5. Unity3D脚本中文系列教程(七)
  6. ITK:使用Deformation Field扭曲图像
  7. mysql转openldap_用mysql作openldap的后台数据库
  8. Apache目录介绍
  9. 抓虫系列(三) 不要轻视web程序中常用的三个池 之数据库连接池
  10. ic读卡器设置工具_什么读卡器,是一用过就想揣身上不想丢的?
  11. atom无法安装插件的解决方法之一
  12. lstm预测单词_从零开始理解单词嵌入| LSTM模型|
  13. 【深度学习】基于TextCNN实现文本分类
  14. 打开php页面变成下载的解决办法
  15. 自我觉察的心理测试软件,认识自己、洞察人心,心理咨询师专用的自我觉察方法...
  16. win10 计算机网络密码,详细教你Win10怎么查看无线网络密码
  17. “AIIA”杯-国家电网-电力专业领域词汇挖掘
  18. windows 查看电脑开关机时间
  19. R语言基础-Rstudio基本使用
  20. phoenxi elixir 框架几个方便的命令

热门文章

  1. 新能源汽车行业资讯-2022-9-15
  2. Android Dialer模块联系人搜索
  3. 字体在ppt中可以整体替换吗_如何批量替换PPT中的字体?
  4. Tk 的基本概念-组件—Tkinter 教程系列03
  5. CAPL函数Test Node中,关闭总线,关闭节点,停发报文应该怎么做?
  6. 计算机二级考试公共基础知识——第一章计算机系统
  7. php友情链接大于3换行,友情链接11大欺骗方法
  8. 计算机专业可以从事测绘行业吗,测绘类专业就业前景怎么样
  9. 计算机专业考注册测绘师经验,测绘工程专业就业前景怎么样,武汉大学学子告诉你...
  10. QML类型:Repeater