黑马程序员技术交流社区

标题: toString();方法到底什么时候重写 [打印本页]

作者: 罗雪梅    时间: 2012-9-16 20:42
标题: toString();方法到底什么时候重写
本帖最后由 罗雪梅 于 2012-9-17 22:36 编辑

迭代集合中的无素的时候为什么总是打印出的是一堆地址,这时候要不要重写toString();方法呢,因为我不写,只要在输出时先定义一个对象类型,迭代的时候将取出来的对象放入这个类型中就可以正常打印了
所以到底什么时候要重写toString呢?

还有就是如果集合中存入的是字符串型的数据,好像即不就能直接打印出来,不用重写也不用强转。

求解答,谢谢

作者: 彭润生    时间: 2012-9-16 20:44
toString一般是在一个类里面覆盖的。
作者: 罗雪梅    时间: 2012-9-16 20:49
彭润生 发表于 2012-9-16 20:44
toString一般是在一个类里面覆盖的。

我知道要在类里重写,但不知道为哪些时候要重写才会不打印地址出来,还有字符串为什么就不用重写
作者: 张榆    时间: 2012-9-16 20:52
如果是对象,就要重写toString方法,因为他是父类Object类中的方法,返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成,即对象的地址值,所以如果你要打印出你想要的效果,就要覆写toString方法,而toString方法本身就是返回String类,而且Stirng类的对象都是常量,所以不用覆写直接就可以打印出字符串。
作者: 彭润生    时间: 2012-9-16 20:53
罗雪梅 发表于 2012-9-16 20:49
我知道要在类里重写,但不知道为哪些时候要重写才会不打印地址出来,还有字符串为什么就不用重写 ...

你把你的程序给我看看,我来看看
作者: 罗雪梅    时间: 2012-9-16 20:57
张榆 发表于 2012-9-16 20:52
如果是对象,就要重写toString方法,因为他是父类Object类中的方法,返回一个字符串,该字符串由类名(对象 ...

奥,这样的啊,明白了谢谢
作者: 杜鹏云    时间: 2012-9-17 10:44
如果装入集合的类需要被打印输出。。。当然前提是他还没有被重写,你可以考虑重写
作者: 陈振兴    时间: 2012-9-17 11:16
本帖最后由 陈振兴 于 2012-9-17 11:18 编辑

toString方法是父类Object的方法,返回值String,所有继承与Object的对象都有这个方法。
针对你的问题:

迭代集合中的无素的时候为什么总是打印出的是一堆地址?
你发现了没,为什么写成Objct ojb = it.next();有的时候是子类(Person p = (Person)it.next()),还需要强制转型(就是向下转型,把父类转换为子类,子类对自己的方法进行操作的),这个明白了,那么,就是知道了,你输出System.out.print(obj)就相当于做了obj.toString方法,这也就是有时子类覆盖父类对象方法时,自己会写如:return name+" "+age,就是这个意思了。
而不写的话,就是你所指的一堆地址,放在堆内存里的,他只能取出地址1a2b3c4a等等,所以会一般写程序的时候会让你覆盖Ojbect中的toString()方法,这样就是你取到的name+age组合了一个对象,不然就是他们两加起来的地址了。
总而言之,toString方法什么时候用,看是不是对象,一般是对抽象出来的对象来做这个的,因为要返回客户端输入的值。





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