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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王少岩 中级黑马   /  2012-4-5 11:45  /  2275 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

toString()方法是如何执行的,在打印一个对象的时候就会执行吗?比如定义一个对象
T t=new T();
System.out.println(t);
这样就会执行吗?如果是,System.out.println(t)相当于怎样的执行了toString()方法?

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
蒙武辉 + 1 + 1

查看全部评分

5 个回复

倒序浏览
会执行
因为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:09
回复 使用道具 举报
黄或俊 发表于 2012-4-5 14:28
会执行
因为toString()是Object类中的一个方法,每个类都继承Object类,所以每个类中都有这个方法。
T t=ne ...

给力?为啥没有技术分呀!
回复 使用道具 举报
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;
        }
     
}
回复 使用道具 举报
楼主的疑问,重点是弄清楚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()方法。
回复 使用道具 举报
打印的时候会自动调用toString()方法!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马