Java中toString方法的解释

Object类:

我们知道Java中,所有类都直接或间接的继承object类,也就是说object类是所有类的父类。所以基本上所有对象都能调用Object类中的方法,So,我们先看看JDKAPI中Object类有多少方法:

Java中toString方法的解释

可以很清晰的看到toString方法返回的是字符串,下附详情,

Java中toString方法的解释

现在来看一下代码,

public class Demo {

    static int  a= 1;

    public static void main(String[] args) {

        System.out.println("love "+new Demo());
        Demo d = new Demo();
        d.a++;
        System.out.println("me "+d.a);
    }

    public String toString(){
        System.out.print("I ");
        return "Java";

    }
}

这段代码,笔者在第一次看到时以为会是"love I Java",但通过编译器知道了正确是"I lova Java",

现在我们来改变下代码:

public class Demo {

    static int  a= 1;

    public static void main(String[] args) {

        System.out.println("我 "+new Demo());
        System.out.println("被");
    }

    public String toString(){
        System.out.println("调 ");
        System.out.println("用 ");
        return "\n了";

    }
}

现在我们发现结果为:

调 
用 
我 
了
被

我们知道大部分语言的代码都是从main方法进入开始执行,我们先当程序执行到"System.out.println("我 "+new Demo());"时,这里的"new Demo()"相当于"Demo d = new Demo();"中的d,可以理解为匿名对象,在本例中由于重写了toString方法,所以,不会在返回

getClass().getName() + '@' + Integer.toHexString(hashCode()),//即[email protected]

 当执行到new Demo();时,系统会自动调用对象的toString方法,同时会看代码中有没有重写toString方法,注意此时"

System.out.println("love "+new Demo());//并没有执行结束,

 因为System类中的方法都是static,所以当调用时系统会先解析System.out.println();方法,所以在终端先打印出“I”,然后打印出"love",最后拼接上toString方法返回的“java”。

下一行代码中,根据对象名去调用静态变量i对其进行++操作,输出me:2。