Duvida sobre Wrappers, TesteKiller questa 193

2 respostas
D
Esta é uma duvida sobre uma questão do TesteKiller (QUestão 193) O codigo abaixo imprime int Long:
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);
    }   
}

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?

2 Respostas

J

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?

D

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:

Criado 22 de abril de 2008
Ultima resposta 22 de abr. de 2008
Respostas 2
Participantes 2