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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿凡提不买驴 中级黑马   /  2013-7-13 22:24  /  1050 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 阿凡提不买驴 于 2013-7-14 11:34 编辑

  1. <P>class Student1</P>
  2. <P>{
  3.        private String id;
  4.        private String name;
  5.        Student1(String id,String name){
  6.        this.id=id;
  7.        this.name=name;
  8.        }
  9.     /*public String toString(){
  10.        return id+"^^^^^"+name;
  11.        }*/
  12. }
  13. public static void getInfos(List<Student1> list)</P>
  14. <P>{
  15.       Iterator<Student1> it=list.iterator();
  16.       while(it.hasNext()){
  17.       Student1 s=it.next();
  18.       System.out.println(s);
  19.       }
  20. }</P>
  21. <P>想问一下,为什么上面的toString是怎么调用啊?必须要覆盖吗?<IMG border=0 alt="" src="http://bbs.itheima.com/forum.php?mod=image&aid=23051&size=300x300&key=5f74f2c366d3e024&nocache=yes&type=fixnone" aid="attachimg_23051">不覆盖是这个结果</P>
复制代码

O8SLKP9)]LY)@}{%[J6}GZ9.jpg (17.75 KB, 下载次数: 0)

O8SLKP9)]LY)@}{%[J6}GZ9.jpg

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

6 个回复

倒序浏览
想问一下,为什么上面的toString是怎么调用啊?必须要覆盖吗?还是覆盖了才会去调用?
回复 使用道具 举报
System.out.println(A);  此方法的打印结果肯定是个字符串,这个字符串就是对象A的toString方法的返回值。
也就是说我们经常用到的println方法默认就回调用被打印对象的toString()方法,自身有就用自身,没就用父类继承来的,Object是所有类的基类,所以没复写toString()方法的都是调用的Object类的toString()方法

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
不覆盖 toString 打印的是一个对象。, 你覆盖后,打印这个对象,就会自动调用toString 方法
回复 使用道具 举报
本帖最后由 wll_sx1990 于 2013-7-13 23:42 编辑

要知道这个必须先知道一点:java中所有的类都是Object的子类,而在Object中,有toString的方法,这个方法就被所有的类继承了。在官方文档中有:
public void println(Object x)Prints an Object and then terminate the line. This method calls at first String.valueOf(x) to get the printed object's string value, then behaves as though it invokes print(String) and then println(). 意思就是说在用System的out对象输出一般对象的时候,String类的valueOf方法会被调用,我们看valueOf方法是怎样返回的:if the argument is null, then a string equal to "null"; otherwise, the value of obj.toString() is returned.显然,最终会调用对象的toString,所以如果你没有重写这个toString的方法的话,调用的是Object的方法,返回的就是默认的返回结果,如果重写了就是你想要得到的结果。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
简单的说:
如果调用toString方法的是一个String类对象 那么你就不必去覆写toString方法了 因为String类已经为你做好了  
如果调用toString方法的不是String类对象  那么你最好覆写toString方法 因为Object类让toString方法返回的是一个哈希地址值
回复 使用道具 举报
好的,谢谢各位,我明白了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马