Bom dia pessoal.
Lendo o livro SCJP 6 em inglês, me deparei com o seguinte exemplo na página 249:
class AddBoxing {
static void go(Integer x) { System.out.println("Integer"); }
static void go(long x) { System.out.println("long"); }
public static void main(String [] args) {
int i = 5;
go(i); // which go() will be invoked?
}
}
"… The answer is
that the compiler will choose widening over boxing, so the output will be
long "
Ou seja, o método escolhido foi o maior mais amplo que int (Long).
Testando a regra, obtive resultado diferente:
Integer foo(Integer n1)
System.out.println("Integer");
Long foo(Long n1)
System.out.println("Long");
Ao chamar o método foo passando um int (primitivo) , o método Integer foi chamado. Não deveria ser o Long? Ou eu entendi errado o conceito?
Obrigado desde já