Algumas regras para a sobrecarga de métodos.
1. Métodos com parâmetros primitivos têm preferência sobre métodos com parâmetros do tipo Wrapper:
public void fazAlgo(int x){}
public void fazAlgo(Integer x){}
public void chamaFazAlgo(){
fazAlgo(5);
}
Se o método fazAlgo(int x) não existisse, o autoboxing entraria em operação e o compilador chamaria adequadamente fazAlgo(Integer x). Como ambos os métodos existem, o primeiro tem preferência.
2. Métodos com parâmetros primitivos têm preferência sobre métodos com a sintaxe de var-args:
public void fazAlgo(int x, int y){}
public void fazAlgo(int... x){}
public void chamaFazAlgo(){
fazAlgo(5,5);
}
3. Métodos com parâmetros do tipo Wrapper têm preferência sobre métodos com a sintaxe de var-args:
public void fazAlgo(Integer x, Integer y){}
public void fazAlgo(int... x){}
public void chamaFazAlgo(){
fazAlgo(5,5);
}
O compilador opta por colocar em operação o autoboxing, convertendo os argumentos 5, 5 para objetos da classe wrapper equivalente, no caso, Integer, chamando, então, o método fazAlgo(Integer x, Integer y).
4. O compilador também pode converter tipos primitivos para outros que não causem perda de informação antes de chamar um método:
public void fazAlgo(int x){}
public void chamaFazAlgo(){
byte b=5;
fazAlgo(b);
}
5. No entanto, o compilador não pode, ao mesmo tempo, converter primitivos para outros que não causem perda de informação e depois empregar autoboxing para chamar um método. Isso não é legal:
public void fazAlgo(Integer x){}
public void chamaFazAlgo(){
byte b=5;
fazAlgo(b);
}
6. Mas o inverso é possível, isto é, o compilador pode empregar autoboxing e depois converter um wrapper para outro objeto e chamar um método (mas lembre-se que objetos wrapper não possuem entre si relações de parentesco):
public void fazAlgo(Object x){}
public void chamaFazAlgo(){
byte b=5;
fazAlgo(b);
}
Neste caso, o compilador emprega autoboxing, transformando o byte b em um objeto Byte e, em seguida, o converte para uma instância de Object, chamando, enfim, o método fazAlgo(Object x).