toString() 方法

本文详细解读了Java中toString方法的作用,介绍了其在Object类中的默认实现(返回对象的类名和地址值),并指出隐式调用的情况。同时,强调了重写toString方法以获得更易读的字符串表示的重要性。
摘要由CSDN通过智能技术生成

toString方法

方法的声明

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#008855">String</span> <span style="color:#0000ff">toString</span>()</span></span>

文档解释

关于toString()方法的作用,在官方JDK文档中,有详细的说明,主要是以下四点:

  1. 返回该对象(调用toString方法的对象)的字符串表示。通常,toString()方法会返回一个"以文本方式表示"此对象的字符串。

  2. 结果应是一个简明但易于读懂的信息表达式。

  3. 建议所有子类都重写此方法。

所以,toString()方法的作用非常简单,说白了,把对象转换成字符串,就和它的方法名一样。而且这个字符串要简洁明了,能够用来描述这个对象,而且最后一句话,已经表明了:Java设计者自己都觉得Object类当中的,toString()方法的默认实现不是一个最优解,子类可以根据自身情况选择重写它。

现在,我们先来看一看toString()方法在Object类当中的默认实现。

默认实现

toString()方法在Object类当中的代码实现,非常简单,如下:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#008855">String</span> <span style="color:#0000ff">toString</span>() {
    <span style="color:#770088">return</span> <span style="color:#000000">getClass</span>().<span style="color:#000000">getName</span>() <span style="color:#981a1a">+</span> <span style="color:#aa1111">"@"</span> <span style="color:#981a1a">+</span> <span style="color:#008855">Integer</span>.<span style="color:#000000">toHexString</span>(<span style="color:#000000">hashCode</span>());
}</span></span>

该方法会返回一个字符串,这个字符串的组成是:

  1. 用当前对象调用getClass()方法(注意这里是省略了this.)获取运行时类对象后,直接调用getName()方法,获取该类型的全限定类名。

  2. Object类当中,hashCode()方法的默认实现是通过计算对象的地址,转换成一个十进制的数字来实现的。一般认为它的返回值是该对象的十进制地址值。

    Integer.toHexString(int)方法是将一个十进制整数转换成十六进制字符串

    所以,Integer.toHexString(hashCode())整体表示的字符串就是:该对象的十六进制地址值。

以上,将内容全部连接起来,该方法的返回值字符串就是:

全限定类名 + @ + 对象的十六进制地址值

注意事项

隐式调用toString方法

在Java代码中,存在以下两种情况会隐式调用该对象的toString()方法:

  1. 直接打印一个对象名(引用)

  2. 对象名(引用)参与字符串拼接

// s是一个引用
System.out.println(s);
System.out.println(s + "hello");
toString方法的结果

toString()方法的结果又要分成两种情况:

  1. 本类中没有重写该方法。

    就会去使用Object类的默认实现,打印对象名会打印地址值。很显然在多数时候,我们并不关心全限定类名和地址值,所以文档说明中推荐子类重写该方法。

  2. 本类中重写了该方法

    toString方法重写的快捷键Alt + Insert。重写后,我们再去打印对象名,或者用对象名拼接字符串,看到的就不再是地址值了,而是我们重写后toString()方法的执行结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值