黑马程序员技术交流社区

标题: 关于toString()方法的使用 [打印本页]

作者: 王少岩    时间: 2012-4-5 11:45
标题: 关于toString()方法的使用
toString()方法是如何执行的,在打印一个对象的时候就会执行吗?比如定义一个对象
T t=new T();
System.out.println(t);
这样就会执行吗?如果是,System.out.println(t)相当于怎样的执行了toString()方法?
作者: 黄或俊    时间: 2012-4-5 14:28
会执行
因为toString()是Object类中的一个方法,每个类都继承Object类,所以每个类中都有这个方法。
T t=new T();
System.out.println(t);

如果自己类中没有重写toString()方法时会输出【类名@哈希值】
class Test_toString
{
    /*
        public String toString()
        {
                return "重写toString方法";
        }
        */
}
class Demo_toString
{
        public static void main(String[] args)
        {
                                  Test_toString t=new Test_toString();
                System.out.println(t);
                  }

作者: 黄或俊    时间: 2012-4-5 16:22
黄或俊 发表于 2012-4-5 14:28
会执行
因为toString()是Object类中的一个方法,每个类都继承Object类,所以每个类中都有这个方法。
T t=ne ...

给力?为啥没有技术分呀!
作者: 王少岩    时间: 2012-4-5 16:24
System.out.println(t)跟t.toString()有什么区别?上面你说的那个我也明白,但是就是感觉有点绕不过弯。。。之前看过一个哥们要打出自己的地址,他重写了toString(),return了this,结果出错了,重写toString()的时候return会有什么后果,循环调用toString()知道耗光内存?
Class A{
     public static void main(String[] args){
           A a = new A();
           System.out.println(a);
     }
     public String toString()
        {
                return "address :"+this;
        }
     
}
作者: newlaw2013    时间: 2012-4-5 21:09
楼主的疑问,重点是弄清楚println()这个方法,当向这个方法中传入参数的时候,它调用了String.valueOf(Objec o),:
public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }
     而String.valueOf(x)会去调用该对象的toString(),源码如下:
  public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
所以当传入t的时候,会调用t.toString()方法。
作者: 一蓑烟雨任平生    时间: 2012-4-6 09:58
打印的时候会自动调用toString()方法!




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