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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗雪梅 中级黑马   /  2012-9-16 20:42  /  3605 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗雪梅 于 2012-9-17 22:36 编辑

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

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

求解答,谢谢

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
toString一般是在一个类里面覆盖的。
回复 使用道具 举报
彭润生 发表于 2012-9-16 20:44
toString一般是在一个类里面覆盖的。

我知道要在类里重写,但不知道为哪些时候要重写才会不打印地址出来,还有字符串为什么就不用重写
回复 使用道具 举报
如果是对象,就要重写toString方法,因为他是父类Object类中的方法,返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成,即对象的地址值,所以如果你要打印出你想要的效果,就要覆写toString方法,而toString方法本身就是返回String类,而且Stirng类的对象都是常量,所以不用覆写直接就可以打印出字符串。

评分

参与人数 1技术分 +1 收起 理由
创出一片辉煌 + 1 赞一个!

查看全部评分

回复 使用道具 举报
罗雪梅 发表于 2012-9-16 20:49
我知道要在类里重写,但不知道为哪些时候要重写才会不打印地址出来,还有字符串为什么就不用重写 ...

你把你的程序给我看看,我来看看
回复 使用道具 举报
张榆 发表于 2012-9-16 20:52
如果是对象,就要重写toString方法,因为他是父类Object类中的方法,返回一个字符串,该字符串由类名(对象 ...

奥,这样的啊,明白了谢谢
回复 使用道具 举报
如果装入集合的类需要被打印输出。。。当然前提是他还没有被重写,你可以考虑重写
回复 使用道具 举报
本帖最后由 陈振兴 于 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方法什么时候用,看是不是对象,一般是对抽象出来的对象来做这个的,因为要返回客户端输入的值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马