黑马程序员技术交流社区

标题: toString()方法 [打印本页]

作者: 恩恩    时间: 2013-12-25 14:21
标题: toString()方法
toString这个方式我在视频里面看到了很多次,我现在有一个疑问,就是这个方法一旦在某个类里面写了,那么你在另外的一个类里面要打印这个对象的某个类的时候是不是就直接使用System.out.println(obj) ; ,这样是不是就只自动调用了toString这个方法,返回的就是里面的值。谁能给我解答一下,我不是太明白。谢谢。
作者: 776699    时间: 2013-12-25 14:44
本帖最后由 776699 于 2013-12-25 14:46 编辑

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

我能这样理解吗,就是这个专门用来对类里面的对象,可以方便查看。
作者: hel    时间: 2013-12-25 14:58
当我们直接打印对象的时候,如:syso(person),他都会调用toString方法,
因为每一个对象都有toString方法,

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

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


作者: 恩恩    时间: 2013-12-25 15:01
hel 发表于 2013-12-25 14:58
当我们直接打印对象的时候,如:syso(person),他都会调用toString方法,
因为每一个对象都有toString方 ...

哦哦,也就是说每个对象就已经有了这个方法,不管什么时候只要你打印它就会调用这个方法,这里之不过是按照自己的方式重写了一边,对吧。
懂了,谢谢。
作者: 弘一    时间: 2013-12-25 16:55
首先,我们来说说,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()方法
作者: 恩恩    时间: 2013-12-25 22:52
弘一 发表于 2013-12-25 16:55
首先,我们来说说,java是默认没有继承父类,那么是默认继承Object类,所以
每一个都会有toString()这方法 ...

很详细,谢谢
作者: 恩恩    时间: 2013-12-25 22:53
hel 发表于 2013-12-25 14:58
当我们直接打印对象的时候,如:syso(person),他都会调用toString方法,
因为每一个对象都有toString方 ...

谢谢你的回答,懂了,呵呵




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2