谁告诉我下,为什么这段代码的输出结果是这样
(最好能具体点)
——————————结果——————————
###
AAAZ
22
——————————代码——————————
public class Z {
static int i = 1;public static void main(String[] args) {
System.out.println("AAA" + new Z());
Z a = new Z();
Z b = new Z();
a.i++;
System.out.println("" + a.i + "" + b.i);
}public String toString() {
System.out.println("###");
return "Z";
}
}
——————————————————————

解决方案 »

  1.   

    当输出一个对象的时候,会自动的调用它的toString方法。现在你将它重写了。
    当运行System.out.println("AAA" + new Z());的时候,便执行toString方法
    肯定先输出System.out.println("###");
    然后返回Z和AAA一起输出。
    22就不多说,"" + a.i + "" + b.i当字符串处理了。
      

  2.   

    当输出一个对象的时候,会自动的调用它的toString方法
    你的toString()方法中真正用于输出的是return “Z”
    之所以先输出### 是因为print之前拼接字符串的时候先调用了toString方法,在里面直接打印了“###”
      

  3.   

    toString是object的方法,Z类覆盖了Object的toString方法,并且,使用System.out.println输出一个对象时,会自动调用其toStirng方法,所以,先输出###,且方法返回Z和AAA拼起来输出,关于2,注意i属性是static全局的,就很容易明白了。
      

  4.   

    System.out.println()先执行里面的,再拼接在一起输出,所以先执行new Z(),调用ToString()方法。
      

  5.   

    顺序是,先实例化Z,System.out.println("AAA" + new Z());里面的+号会自动调用z的tostring方法,然后你重写了toString方法,于是就先输出###,然后返回字符串“Z”,他和“AAA”组成了新的字符串“AAAZ”。然后输出AAAZ,最后你设定的i是静态的类变量,每个这个类实例化的对象都共用这个静态变量i,于是两个不同对象调用的是同一个i
    自己的观点,希望对楼主有帮助
      

  6.   

    当你把对象打印输出的时候,会自动调用toString方法,既然你的代码里重写了toString()方法,肯定按照你的格式打印咯!
    i是静态全局变量,只有单份内存拷贝,不是属于对象级别的,i的值为2.
      

  7.   

    System.out.println("AAA" + new Z());相当于:
    String temp = new Z().toString(); //调用toString(),打印出“###”,并把"Z"赋值给temp
    System.out.println("AAA" + temp); //打印出: “AAAZ”
      

  8.   


    public class Z {
    static int i = 1;public static void main(String[] args) {
    System.out.println("AAA" + new Z());
    Z a = new Z();
    Z b = new Z();
    a.i++;
    System.out.println("" + a.i + "" + b.i);
    }public String toString() {
    System.out.println("###");
    return "Z";
    }
    }
    代码里面有一个蓝色的地方,调用new z()的时候就自动调用了他的toString的方法,下面的输出应该简单把