大家先看以下程序
/*-------------------我是程序-------------------*/
class Example
{

public String toString()
{
return "Exampale";
}
}
public class Tostring 
{
public static void main(String[] args)
{
System.out.println(new Example());

}}
/*-------------------我是程序-------------------*/
这段程序执行结果是  Exampale
再看以下程序
/*-------------------我是程序-------------------*/
class Example
{

}
public class Tostring 
{
public static void main(String[] args)
{
System.out.println(new Example());

}}
/*-------------------我是程序-------------------*/
这段程序执行结果是  Example@6b97fd我的疑惑是 System.out.println(new Example());
这里我没有调用toString函数,为什么会输出 Example 编译器是如何做到的?
如果我override了toString函数,但是想打印的是句柄,编译器这样做岂不是画蛇添足了么?
望高人解一下,小弟新手,分不多,见谅~~~

解决方案 »

  1.   

    楼主 首先你看看object类有1个tostring方法这个东西是干什么的呢?是描述 一个对象的信息,如果没有这个 我是谁 谁知道呢??所以大部门情况下 会重写这个方法,而不是那些看不懂 的东西
      

  2.   

    toString方法在Object类中已存在,你可以重载
    返回值相当于:getClass().getName() + '@' + Integer.toHexString(hashCode())
      

  3.   

    我看的书上说,当对象在应该是String对象的地方出现时,系统隐含地调用其toString方法……
    第一个程序已经重写了toString的方法,所以会输出Example.
    第二个问题就不知道了,这书讲得太浅……
    我书还没看完呢,等着看高手的解释……
      

  4.   

    Object类中toString()方法的原始定义如下:
    public String toString(){
       return getClass().getName()+"@"+Integer.toHexString(hashCode);
    }
    其功能是以字符串形式返回当前对象的有关信息,返回的是对象所属的类型名称及其哈希码
    当使用System.out.println(new Example());的时候,System.out.println()方法中会自动先调用其toString()方法,再将所返回的字符串信息输出到屏幕上。
    因为你没有直接调用你所写的toString()方法,所以当输出一个对象的时候会自动调用原先的toString()方法
    不知道我的解释你明白了没有
      

  5.   

    如果你在定义类的时候,没有继承任何类,那么它默认继承Object类。
    Object类实现了toString()方法。所以如果你不重写这个方法的话,调用的就是Object类的toString方法。
      

  6.   

    toString方法是定义在了基类Object中。默认的实现就是打印出当前对象的地址。在输出System.out.print(obj)方法中,默认的就是调用来toString()方法。为了能够让toString()方法更有意义一些,可以在自定义类中重写toString()方法。这也是effective java一书中介绍和提倡的。
      

  7.   

    System.out.println(new Example())
    就是调用了System.out.write(String.valueOf(new Example()));而String.valueOf方法的实现是    public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
        }
    所以最后会调用Example的toString方法