Java中toString方法的解释
Object类:
我们知道Java中,所有类都直接或间接的继承object类,也就是说object类是所有类的父类。所以基本上所有对象都能调用Object类中的方法,So,我们先看看JDKAPI中Object类有多少方法:
可以很清晰的看到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。