为什么选择Object而不是Object []和原始数组用于重载方法?

时间:2015-06-29 19:13:47

标签: java arrays overloading primitive

当我运行此代码时:

class Test {
    public static void main(String[] args) throws Exception {
        someMethod(new int[] {1, 2, 3});
    }

    static void someMethod(Object obj) {
        System.out.println("Single object given: " + obj);
    }

    static void someMethod(Object[] objs) {
        System.out.println("Multiple objects given: " + Arrays.toString(objs));
    }
}

我获得someMethod(Object[] objs)选择int[]的输出:

Single object given: [I@140e19d

当我尝试记录一些消息时,我遇到了这样的行为:

logger.log(Level.INFO, "param1: {0}, param2: {1}", new int[] {1, 2});

输出:

...
INFO: param1: [I@103dbd3, param2: {1}

那么为什么选择Object而不是Object []作为原始数组的方法参数呢?

1 个答案:

答案 0 :(得分:4)

因为int[] 不是 Object[] - 它就这么简单。 Object[]的元素必须是引用 - int[]的元素不是引用。

JLS section 4.10.3讨论了数组的子类型关系 - 特别是:

  

如果ST都是引用类型,那么S[] >1 T[] iff S >1 T