A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王虎 中级黑马   /  2012-10-21 20:33  /  1009 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候调用Object的toString方法?什么时候调用自己写的toString方法?
比如打印StrinBuilder时,就需要调用------点个点调用,但是打印Integer对象时却不用调用-------没有点点调用,这俩的帮助文档里都有toString,还有打印自定义对象时只是重写了,也没有“对象点个点调用”啊?

4 个回复

倒序浏览
本帖最后由 江苏孙浩 于 2012-10-21 21:11 编辑

个人理解:
01 关于Object的toString()和具体类的toString()只是关于多态的问题
02 对于打印int或者Integer类型,可以看到,实际上系统调用的是println(Obejct obj)这么一个函数,这样在println内部可以为你调用toString()方法,所以实际上也是调用toString()方法的,只是调用代码不是你写的;而StringBuffer比如用来生成字符串作为return的值的时候,首先明确StringBuffer不是String的派生类,所以不能直接转换为String,那么实际要转换为String就需要调用其toString()方法。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
重写必须调用吗?什么情况需要调用,什么情况不需要调用?
回复 使用道具 举报
王虎 发表于 2012-10-21 21:19
重写必须调用吗?什么情况需要调用,什么情况不需要调用?

觉得本质上,要将非String派生类的对象转为String,必须调用相关操作,比如toString();但是一些方法,如println中,可以为你调用toString();必须有人调用toString(),如果这个人不是 类库,那么就是你了
回复 使用道具 举报
你的解释把我点通了,谢了啊哥们!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马