【PrintStream源码分析】toString()方法的调用

【PrintStream源码分析】toString()方法的调用

今天在做泛型联系的时候重写了toString()方法,偶然发现在没有调用它的情况下却输出了其中的内容。在查阅仔细看过之后决定写下心得作为进步的记录,也希望与大家分享能够帮助你们。
我们先来看下实践代码,如下图。

Persons类
Base类
Test类
如上图所示,Persons类是一个定义了类型的泛型类,其中属性info是T类型。Base类中有String类型的name和int类型的age,并重写toString()方法对属性进行拼接并且return。在测试类中定义一个Base类型对象b并通过有参构造方法对属性进行赋值;再定义一个Persons类型的对象p,通过有参构造方法传入b。
往下看p.getInfo()方法应该得到的是b对象,正常情况下,对b对象进行输出应该输出的是b对象在内存中的地址,但结果输出如下:
在这里插入图片描述
那么问题来了,我并没有调用toString()方法,为什么会出现这种结果?
我们找到System.out.print()方法的源码来看下,他在PrintStream类中。
在这里插入图片描述
即打印出String.valueOf(obj)的返回值,我们再找到valueOf()方法来看下,显然是在String类中。
在这里插入图片描述
如果传入的obj不是空,那么久返回obj.toString()方法的结果。而前面我们传入的obj就是对象b,并已经重写了toString()方法,所以最后输出了我们重写之后的b.toString()方法的值。
***总结:***在使用print方法的时候会自动调用对应的toString()方法,这也是为什么我们并没有主动调用toString()方法就有了结果的原因。int、double等基本数据类型对应的是Integer、Double等类中的toStriing方法,可以自己尝试一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值