Duvida sobre Wrappers, TesteKiller questa 193

Esta é uma duvida sobre uma questão do TesteKiller (QUestão 193)
O codigo abaixo imprime int Long:

[code]
public class TesteA
{
static void go(Long n)
{
System.out.println(“Long”);
}

static void go(Short n)
{
    System.out.println("Short");
}

static void go(int n)
{
    System.out.println("int");
}
public static void main(String args[])
{
    short s = 6;
    long y = 7;
    go(s);
    go(y);
}   

}[/code]

mas pq int e long??
Pelo pouco que sabia os literais de números são int e double, pensava eu que se eu digito int numero = 1; e long numero = 1; ambos seriam int, para ser long deveria fazer long numero = 1L;.
Como esses números são tratados em runtime?

Dark, você acertou quando disse que as literais de números em java ou é do tipo int (quando o número é inteiro) ou é double (quando o número é ponto flutuante), mas quando você faz :

long numero = 1;

ocorre uma conversão implicita de int para long, pois um int é representado por 32 bits e long por 64, logo um long pode representar qualquer int. Além disso, vc precisa conhecer outra novidade do java 5, o auto boxing. O auto boxing é a conversão automática entre um primitivo e sua respectiva classe wrapper. Portanto:

short s = 6; long y = 7; go(s); //recebe um short e chama o método int pq windening(conversão implicita entre primitivos) prevalece //sobre auto boxing em métodos sobrecarregados. go(y);//recebe um long primitivo e o converte para sua classe wrapper através de auto boxing, por isso chama //o método Long.
vc entendeu?

sim mano ^^
já estava escrevendo outra resposta mas me atentei novamente a sua e vi o que não tinha entendido antes… não sabia do windening, primeira vez que vejo isso
obrigado ai mano :smiley: