数组在Java中的微妙行为

时间:2014-04-17 17:11:10

标签: java

import java.util.Arrays;
class B {

    int i;

    B(int i) {
    this.i = i;
    }

     public String toString() {
          return "i = " + this.i;
       }
}

 public class MainClass{

        public static void main(String[] args) {
            B [] x = new B[2];
            x[0] = new B(90);
            x[1] = new B(100);
            B obj = new B(10);
            System.out.println(obj);
                    System.out.println(x);//toString method of class B is not called here.

    }
}

//当我打印obj时,调用了B类的toString方法,但是当我尝试打印x时,它没有被调用。可以解释为什么!!!

3 个答案:

答案 0 :(得分:1)

实际上,Array类的toString方法被调用,而Array不会覆盖对象toString() - 所以你得到一个类名和(基本上)一个引用地址。你想要的可能是Arrays.toString(Object[]) - 就像这样,

// System.out.println(x); // <-- calls toString of java.lang.Array
System.out.println(Arrays.toString(x));

答案 1 :(得分:0)

Java不会自动在数组成员上调用toString。如上所述here,您需要Arrays.toString(x)

答案 2 :(得分:0)

这是因为你打印的是数组本身,而不是数组的各个元素。数组也是对象,但它们不会覆盖toString() from Object。尝试

System.out.println(Arrays.toString(x));