2015-06-29 44 views
0

當我運行這段代碼:爲什麼選擇Object而不是Object []與原始數組重載的方法?

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: [[email protected] 

我面臨着這樣的行爲試圖登錄一些消息,因爲這時候:

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

其中輸出:

... 
INFO: param1: [[email protected], param2: {1} 

那麼爲什麼選擇Object而不是Object []作爲原始數組的方法參數呢?

+1

int []不是'Object []'。 –

回答

4

因爲int[]不是Object[] - 就這麼簡單。 Object[]的元素必須是參考 - 而int[]的元素是而不是的參考。

JLS section 4.10.3有關陣列亞型關係的談判 - 特別是:

如果ST都是引用類型,那麼當且僅當S[] >1 T[]S >1 T

+0

好吧,這不是一個錯誤,因爲我認爲:)謝謝spec鏈接。 – cybersoft

相關問題