Java之Object类的equals、toString方法(完结)

Object类是所有类的超类、父类,也就是说任何一个类都是由Object继承而来的。但是不包括接口,接口与Object没有继承的关系。接下来讨论Object类中常用的equals和toString方法

1. equals(Object obj)方法:

1.1 原生方法

先看代码:

Person类
测试Person的equals方法

运行后结果打印出false,是应为,Object中的equals方法被Person类继承了,equals方法的源码是:

Object.equals源码

也就是说equals是比较2个对象的内存地址,所以p1、p2没有相互赋值,永远都返回false


1.2 overwrite equals方法

由于比较2个内存地址没有太大意义,不同的地址比较也没有可比性,所以可以按需求重写equals方法,去比较p1、p2的成员属性的值

重写equals方法,只要年龄相同2个对象就相同


1.3 重写equals的风险避免

由于有多态的向下转型,那么obj参数有可能不是Person类型,所以需要在重写的时候对obj的类型判断

代码健壮性补充


1.4 提高执行效率

由于obj有可能为null,所以提前判断可以避免程序去执行instanceof,直接返回false

也有可能比较的2个对象的地址相同,那么也可直接返回ture

提升执行效率


2. toString()方法:

2.1 原生方法

Person类的代码还是1中的代码

TestToString代码如下:

输出语句中,打印p默认打印p的toString方法
toString的原生方法

运行程序发现打印s和p的结果是一样的:

com.gamebear.s14.Person@70dea4e

com.gamebear.s14.Person@70dea4e

也就是说,在输出语句中,如果打印一个对象,那么默认调用对象的toString方法


2.2 重写toString方法

我们对一个类的toString,实际上希望看到这个类中的成员的值,而类的地址对用户没有任何实际意义,所以需要重写toString方法

重写toString方法


3 注意事项

在开发中,有可能会发现equals和toString方法并不是你想象的结果,是因为这2个方法在新的的类中可能被重写了,一定要去看开发手册和源代码。

如果不符合你的要求,需要再次被重写

例如Scanner类的toString方法

再例如大家熟悉的String类,打印的时候也没有地址,也是因为String的toString方法被重写了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,555评论 0 6
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,416评论 0 4
  • 我们默默地做着浪漫的事 彼此默默地知根知底
    郭绿狮阅读 137评论 0 2
  • 这部电影也是拖了好长的时间才看完,因为没有字幕,只能靠纯听。这部电影很出名,但是一直没看,女生估计都会被西雅图的一...
    说吧_记忆阅读 309评论 0 0