Написание этого:
static void hello(Integer... x){
это в основном причудливый способ написать это:
static void hello(Integer[] x){
с дополнительным бонусом, который вы можете вызвать первым таким образом:
hello(Integer.valueOf(1), Integer.valueOf(2));
вместо
hello(new Integer[]{Integer.valueOf(1), Integer.valueOf(2)});
Сказав это, вы все равно можете использовать вторую форму с методом с varargs.
Вторая проблема заключается в том, что массив, даже массив примитивов, рассматривается в Java как объект. Так что если вы напишите:
hello(null);
вы вызываете hello
с параметром, который является null
массивом Integer
с, а не new Integer[]{null}
.
Первый вызов передает пустой массив, поэтому длина равна 0. Аналогично, третий вызов передает массив длиной 44, и в результате вы получите его.