Ваш вопрос не о приоритете преобразований в целом, а о деталях алгоритма разрешения перегрузки.
По причинам обратной совместимости процесс разрешения перегрузки состоит из 3 этапов:
- Фаза 1: определение подходящих методов арности, применимых к подтипам
- игнорирует varargs и бокс / распаковку
- Этап 2. Определение подходящих методов арности, применимых путем преобразования вызова метода
- игнорирует varargs, но учитывает бокс / распаковку
- Этап 3: определение применимых методов переменной арности
- поддерживает все возможные преобразования
Если компилятору не удается определить потенциально применимые методы на одном этапе, он переходит к следующему, чрезмерно анализирует потенциально применимые методы для выбора наиболее конкретного и использует его для вызова.
Как видите, в вашем случае оба вызова применимы подтипом (short
является подтипом int
, Integer
является подтипом Number
), поэтому они разрешаются на этапе 1, поэтому тот процесс разрешения перегрузки никогда не достигает фазы 2, и возможная распаковка игнорируется.
См. Также: