No capítulo anterior, você viu como o Java converterá um int primitivo em um objeto Inteiro para adicioná-lo a um ArrayList através das maravilhas do autoboxing. Isso funciona para o código que você escreva também.
public void fly(Integer numMiles) { }
Isso significa chamar fly (3); chamará o método anterior conforme o esperado. No entanto, o que acontece se tivermos uma versão primitiva e uma inteira?
public void fly(int numMiles) { }
public void fly(Integer numMiles) { }
Java corresponderá à versão int numMiles . Java tenta usar o parâmetro mais específico lista que pode encontrar. Quando a versão int primitiva não estiver presente, ela será autobox. No entanto, quando a versão int primitiva é fornecida, não há razão para o Java fazer o trabalho extra de autoboxing.