4
и 5
являются литералами int
. Поэтому они соответствуют вашему method1(int a, int b)
без какого-либо преобразования. Поэтому будет выбрано method1(int a, int b)
.
Чтобы выбрать method1(Integer a, Integer b)
, компилятор должен будет поместить два литерала int
в Integer
с. Это может иметь место только в том случае, если не найден метод, соответствующий имени вашего метода и переданным параметрам, которые не требуют преобразования в бокс / распаковку. Очевидно, что это не так, поскольку method1(int a, int b)
существует. Даже method1(long a, int b)
или method1(long a, long b)
или method1(int a, long b)
предпочтительнее, чем method1(Integer a, Integer b)
, поскольку они не требуют преобразования в бокс.