As primitivas funcionam de maneira semelhante às variáveis de referência. Java tenta encontrar os mais específicos método sobrecarregado correspondente. O que você acha que acontece aqui?
public class Plane {
public void fly(int i) {
System.out.print("int ");
}
public void fly(long l) {
System.out.print("long ");
}
public static void main(String[] args) {
Plane p = new Plane();
p.fly(123);
p.fly(123L);
} }
A resposta é longa . A primeira chamada passa um int e vê uma correspondência exata. O segundoA segunda chamada é longa e também vê uma correspondência exata. Se comentarmos a sobrecarga Com a lista de parâmetros int , a saída se torna longa . Java não tem problema chamando um primitivo maior. No entanto, isso não será feito, a menos que uma correspondência melhor não seja encontrada.
Observe que Java pode aceitar apenas tipos mais amplos. Um int pode ser passado para um método que leva um parâmetro longo . Java não será convertido automaticamente para um tipo mais restrito. Se você quer passar um longo a um método de tomar um int parâmetro, você tem que adicionar um elenco de dizer explicitamente narremar está bem.