大家可以看一下这一段代码
public class Demo1 {
static int i=1;
public static void main(String[] args) {
System.out.println("love"+new Demo1());
Demo1 a=new Demo1();
a.i++;
System.out.println("me"+a.i);
}
public String toString(){
System.out.print("I ");
return "java";
}
}
输出结果
看完大家是不是会有一个疑问为什么输出的是 I love java
首先我们看一下在System.out.println中在love的后面new了一个新的Demo1,在这里我要告诉大家在System.out.println中new一个新的对象会先执行这个对象中的toString的方法,如果这个方法被重写了那会执行被重写的方法,但不会急与返回参数会在前面的打印完以后再返回。所以先执行toString中的方法打印出I再打印出love当love打印出来以后将toString中的java返回给System.out.println并将它打印出来。
让后在new一个Demo1调用i,因为i是静态变量所以加载是时最先被加载,让后经过自加返回的是2。