toString()、equals()与hashCode()

我们为什么需要toString()、equals()与hashCode()?

  Java是面向对象的,除了基础数据类型,我们平时更多情况都是跟引用数据类型:类与对象,打交道。而引用数据类型使用起来,没有基础数据类型那么简单方便。比如需要查看“值”的时候,直接打印基础数据类型,就能知道它的值,而应用数据类型,特别是我们自己创建的类与对象,打印出来的则是由hashCode生成的地址。

  所以,为了使应用数据类型打印时可以直观知道它的值,我们需要重写toString()方法。

  在进行比较时,基础数据类型直接通过“ == ”就可以判断。而对于引用数据类型,“ == ”是判断的地址,两个不同的对象,即使里面的值相同,但地址也是不同的。

  所以我们需要重写equals()方法,来根据我们的逻辑判断引用数据类型是否相等。

  而提到equals()方法,就不得不提到hashCode()方法。为什么呢?请看下文:

Object类

  在这里,不得不先提一下Object类,它是Java所有类的父类,不过好在没人给他取别名,没叫它诸如“创始者类”、“盘古类”等。所有的类都默认继承与Object类,所有Object类里的方法,其他类不进行重写也会拥有。这里谈到的toString()、equals()与hashCode()三个方法,都是在Object类里定义的,所以这三个方法是所有类都有的方法。
在这里插入图片描述

toString()

  最低阶的调试方法:使用System.out.println();打印我们想了解的对象,观察它的值来判断。(如何高端得进行调试,我就不展开将了,因为我也只到了debug工具的级别)
  而对于我们自己创建的类,直接打印它的实例化对象时,会发现只能打印出一串字符:

		Student student1 = new Student();
		System.out.println(student1);
-------------------------------------------------------------------
输出结果为:
com.project.test.Student@3c1

  需要知道的时,其实我们在进行打印一个对象时,就是默认调用了它的toString()方法,即System.out.println(student1);等效于System.out.println(student1.toString());。那toString()方法里到底做了什么呢?前往Object类中一探究竟:

	//Object类中源码
    public String toString() {
   
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

  如果我们不重写toString()方法,则会返回:类名+@符号+对象的hashCode的16进制数。(Integer.toHexString方法是将数转换为16进制),所以直接打印出来的并不是地址,而是与地址相关的一串字符串。

  所以我们想在打印是输出我们想要的数据&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值