Это потому, что автобокс может происходить только от примитива к его оболочке (например, int
до Integer
), а не от массива примитива к массиву соответствующей оболочки.Аналогичный случай с autounboxing.
Например, если вы определите свой метод тестирования следующим образом:
public static void test(int n) {} //<-- param n is of type int primitive
, вы можете сделать что-то следующим образом:
Integer n = 1; // autoboxing happens here too
test(n); //this is a valid call because n is autounboxed
Но, если выопределите свой метод тестирования следующим образом:
public static void test(int[] n) {} //<-- param n is an array of int primitives
, тогда произойдет сбой чего-то следующего:
Integer[] ns = {1, 2}; // no autboxing here because we are dealing with array (just a syntactic sugar)
// Integer[] ns = new int[]{1, 2}; // something like this is not valid
test(ns); // this will fail