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