黑马程序员技术交流社区

标题: 关于toString的调用问题?求指教 [打印本页]

作者: 阿凡提不买驴    时间: 2013-7-13 22:24
标题: 关于toString的调用问题?求指教
本帖最后由 阿凡提不买驴 于 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

作者: 阿凡提不买驴    时间: 2013-7-13 22:25
想问一下,为什么上面的toString是怎么调用啊?必须要覆盖吗?还是覆盖了才会去调用?
作者: 风乐    时间: 2013-7-13 22:41
System.out.println(A);  此方法的打印结果肯定是个字符串,这个字符串就是对象A的toString方法的返回值。
也就是说我们经常用到的println方法默认就回调用被打印对象的toString()方法,自身有就用自身,没就用父类继承来的,Object是所有类的基类,所以没复写toString()方法的都是调用的Object类的toString()方法
作者: 张君    时间: 2013-7-13 23:35
不覆盖 toString 打印的是一个对象。, 你覆盖后,打印这个对象,就会自动调用toString 方法
作者: wll_sx1990    时间: 2013-7-13 23:38
本帖最后由 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的方法,返回的就是默认的返回结果,如果重写了就是你想要得到的结果。
作者: 下雨天    时间: 2013-7-13 23:50
简单的说:
如果调用toString方法的是一个String类对象 那么你就不必去覆写toString方法了 因为String类已经为你做好了  
如果调用toString方法的不是String类对象  那么你最好覆写toString方法 因为Object类让toString方法返回的是一个哈希地址值
作者: 阿凡提不买驴    时间: 2013-7-14 11:33
好的,谢谢各位,我明白了!




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