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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 恩恩 中级黑马   /  2013-12-25 14:21  /  1442 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

toString这个方式我在视频里面看到了很多次,我现在有一个疑问,就是这个方法一旦在某个类里面写了,那么你在另外的一个类里面要打印这个对象的某个类的时候是不是就直接使用System.out.println(obj) ; ,这样是不是就只自动调用了toString这个方法,返回的就是里面的值。谁能给我解答一下,我不是太明白。谢谢。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 776699 于 2013-12-25 14:46 编辑

每个对象都有一个内存地址值,所以你打印的时候就会返回其内存地址;复写toString(),为了开发便于定义于自己想要的形式显示出来。
回复 使用道具 举报
776699 发表于 2013-12-25 14:44
每个对象都有一个内存地址值,所以你打印的时候就会返回其内存地址;复写toString(),为了开发便于定义于 ...

我能这样理解吗,就是这个专门用来对类里面的对象,可以方便查看。
回复 使用道具 举报
hel 中级黑马 2013-12-25 14:58:12
板凳
当我们直接打印对象的时候,如:syso(person),他都会调用toString方法,
因为每一个对象都有toString方法,

他在object中定义的是:return getClass().getName() + '@' + Integer.toHexString(hashCode())
如果想要要打印我们自己想要的格式,我们可以重写这个方法

所以他会按照我们定义的方法打印

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
hel 发表于 2013-12-25 14:58
当我们直接打印对象的时候,如:syso(person),他都会调用toString方法,
因为每一个对象都有toString方 ...

哦哦,也就是说每个对象就已经有了这个方法,不管什么时候只要你打印它就会调用这个方法,这里之不过是按照自己的方式重写了一边,对吧。
懂了,谢谢。
回复 使用道具 举报
首先,我们来说说,java是默认没有继承父类,那么是默认继承Object类,所以
每一个都会有toString()这方法。
那我们现在看看System.out.println(obj);这个方法在底层是如何实现的?
public void print(Object obj) {
        write(String.valueOf(obj));
}

我们现在需要看看String.valueOf(obj)是返回一个什么样的值。
public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
}

我现在我们可以知道了,我们调用println来打印Object对象时,
底层就会打印obj的toString()方法

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
恩恩 中级黑马 2013-12-25 22:52:43
7#
弘一 发表于 2013-12-25 16:55
首先,我们来说说,java是默认没有继承父类,那么是默认继承Object类,所以
每一个都会有toString()这方法 ...

很详细,谢谢
回复 使用道具 举报
恩恩 中级黑马 2013-12-25 22:53:54
8#
hel 发表于 2013-12-25 14:58
当我们直接打印对象的时候,如:syso(person),他都会调用toString方法,
因为每一个对象都有toString方 ...

谢谢你的回答,懂了,呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马