大家先看以下程序
/*-------------------我是程序-------------------*/
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函数,但是想打印的是句柄,编译器这样做岂不是画蛇添足了么?
望高人解一下,小弟新手,分不多,见谅~~~
/*-------------------我是程序-------------------*/
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函数,但是想打印的是句柄,编译器这样做岂不是画蛇添足了么?
望高人解一下,小弟新手,分不多,见谅~~~
返回值相当于:getClass().getName() + '@' + Integer.toHexString(hashCode())
第一个程序已经重写了toString的方法,所以会输出Example.
第二个问题就不知道了,这书讲得太浅……
我书还没看完呢,等着看高手的解释……
public String toString(){
return getClass().getName()+"@"+Integer.toHexString(hashCode);
}
其功能是以字符串形式返回当前对象的有关信息,返回的是对象所属的类型名称及其哈希码
当使用System.out.println(new Example());的时候,System.out.println()方法中会自动先调用其toString()方法,再将所返回的字符串信息输出到屏幕上。
因为你没有直接调用你所写的toString()方法,所以当输出一个对象的时候会自动调用原先的toString()方法
不知道我的解释你明白了没有
Object类实现了toString()方法。所以如果你不重写这个方法的话,调用的就是Object类的toString方法。
就是调用了System.out.write(String.valueOf(new Example()));而String.valueOf方法的实现是 public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
所以最后会调用Example的toString方法