Duvida sobre boxing e argumentos

6 respostas
M

Dado o seguinte codigo:

public class Bertha {

    static String s = " ";

    public static void main(String... args) {

       int x = 4; Boolean y = true; short[] sa = {1,2,3};

     doStuff( x, y );
     doStuff( x );
     doStuff( sa, sa );

     System.out.println(s);

    }

    static void doStuff(Object o)     { s += "1"; }
    static void doStuff(Object... o)  { s += "2"; }
    static void doStuff(Integer... i) { s += "3"; }
    static void doStuff(long L)       { s += "4"; }
}

Porque a reposta é [color=red]212 [/color]??? Porque não é 232???

Porque a segunda chamada (doStuff( x );) cai em doStuff(Object o) e não em doStuff(long L) ? Ambos x e L são primitivos. Um int não cabe em um long?

Alguém pode me ajudar com boxing e argumentos? Isso não tá muito claro pra mim.

Obrigado

6 Respostas

evertonsilvagomesjav
vc tem certeza que o método espera um long primitivo
(long numero)
? Se for um long primitivo ele vai fazer o casting sim mas se for wrapper
(Long numero)
a resposta do livro esta correta e 212 mesmo, pq não existe boxing de tipos diferentes por exemplo:
int numero = 10;

Long testeBoxing = numero; // erro de compilação;

e quanto ao tipo primitivo:

int x = 4;
doStuff( x );

fazer a chamada ao método de (Object o) é pq o (Integer...i) esta utilizando var-args e o compilador procura por meios mais especificos.

M

evertonsilvagomesjava:
vc tem certeza que o método espera um long primitivo

Não. fiz a besteira de comprar o livro em portugues e tem erros de digitação de monte. Se eu não tivesse feito umas anotações nele eu teria ido na livraria e trocado pelo em ingles.

Vou procurar o livro em pdf e ver se ´exercicio usa long primitivo ou se foi erro de digitação.

Quanto ao resto, valeu!

renamed

A resposta é 242

evertonsilvagomesjav

e igual eu falei se for long primitivo vai ser 242, porém pelo livro estar falando que e 212 pode ser que seja Long warapper e ai será 212.

A

Eu tenho pdf do livro da Katty Sierra.

É wrapper mesmo. No lugar de long vem Long.
segue a questão:

3. public class Bertha { 4. static String s = ""; 5. public static void main(String[] args) { 6. int x = 4; Boolean y = true; short[] sa = {1,2,3}; 7. doStuff(x, y); 8. doStuff(x); 9. doStuff(sa, sa); 10. System.out.println(s); 11. } 12. static void doStuff(Object o) { s += "1"; } 13. static void doStuff(Object... o) { s += "2"; } 14. static void doStuff(Integer... i) { s += "3"; } 15. static void doStuff(Long L) { s += "4"; } 16. }

evertonsilvagomesjav

Humm pois então ai o livro ta correto.

resp: 212

Criado 15 de dezembro de 2009
Ultima resposta 16 de dez. de 2009
Respostas 6
Participantes 4