黑马程序员技术交流社区

标题: toString()是怎么被自动调用的啊,求解答 [打印本页]

作者: Mr.飞碍特    时间: 2014-4-22 09:33
标题: toString()是怎么被自动调用的啊,求解答

  1. public abstract class WeekDay1 {
  2.         private WeekDay1(){}
  3.         
  4.         public final static WeekDay1 SUN = new WeekDay1(){
  5.                 public WeekDay1 nextDay() {        
  6.                         return MON;
  7.                 }        
  8.         };

  9.         public final static WeekDay1 MON = new WeekDay1(){               
  10.                 public WeekDay1 nextDay() {               
  11.                         return SUN;
  12.                 }        
  13.         };        
  14.         
  15.         public abstract WeekDay1 nextDay();
  16.         
  17.         public String toString(){
  18.                 return this==SUN?"SUN":"MON";
  19.         }
  20. }
  21. public class EnumTest {
  22.         public static void main(String[] args) {
  23.         WeekDay1 weekDay = WeekDay1.MON;
  24.         System.out.println(weekDay.nextDay());//weekDay.nextDay()得到的是对象 但打印的时候却打印出的字符串,调用tostring()方法的原理是什么???都有什么情况会调用他?如果这样写呢weekDay.nextDay().tostring()   
  25.        }
  26. }
复制代码




作者: 二小傻    时间: 2014-4-22 09:47
toString 在使用print直接打印对象的时候自动调用的,你不写toString 方法的话 也会自动调用系统的toString。
作者: 海世山盟    时间: 2014-4-22 09:58
toString 来源于根类Object。返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。所以任何一个类(类都继承了Object)都会有otString()方法。
      所以当我们在输出对象信息时,只要该对象包含了toString方法(例如:我们建了一个Student类,Student类默认继承了Object所以也就默认有了otString()方法),当我们在输出对象信息(例如打印学生信息)时都会自动调用toString方法。我们要想根据自己的意愿打印,就需要复写otString()方法即可。
   当对象本身没有toString()方法时(例如数组),如果我们直接打印数组,那打印的就只能是数组的首地址了。此时如果想将数组作为字符串的形式返回,那就必须显示调用Arrays里面的toString(T[] t)方法。
作者: 坏米饭    时间: 2014-4-22 11:45
楼上的,你toString()方法都写错了。
System.out.println()方法就是把参数转换成String。


你自己可以去找源码看:
    public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }
作者: Mr.飞碍特    时间: 2014-4-22 11:51
4l赞一个




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