PCF-3

Questões comentadas, artigos e notícias

Java Puzzle [#5] – Jackson 5.

Posted by p3r1t0cr1m1n4l em 24/02/2009

Cansado de resolver cenários de provas da PF e querendo dar uma desopilada, nosso colega Alexandre Teixeira (grande fã dos Jackson 5) decide fazer uma homenagem à sua música favorita: ABC ( http://www.youtube.com/watch?v=ZOXG8wtxx_w ). Ele abre o VIM e começa a codificar o seguinte programa:

public class ABC {
     public static void main(String args[]) {
          String amoEssaMusica = "ABC";
          char[] todosJuntos = { '1', '2', '3' };
          System.out.println(amoEssaMusica + " easy as " + todosJuntos);
     }
}

A pergunta que não quer calar, ele conseguiu imprimir o refrão da tão amada música?

Solução:

Infelizmente ao rodar o programa, o ilustre Alexandre terá como saída ABC easy as [C@16f0472.

O que aconteceu?

Muitas bibliotecas tratam os valores char de forma especial, representando caracteres ao invés de números. Por exemplo, passado um valor char para o println, ele vai imprimir um caractere Unicode, e não o seu código número. Com um array de valores char não é diferente! Através do overloading do método println serão impressos todos os caracteres contidos no array, invocando o .toString() de cada objeto.

O que acontece no entanto quando se invoca o toString() de um array de chars não-nulos? É retornada uma String com o nome da classe da qual o objeto é instância, a arroba (@) e uma representação hexadecimal do código hash do objeto.

A especificação de Class.getName diz que o resultado de invocar esse método em um objeto char[] é “[C”. Complementando com a arroba e o hexadecimal temos esse monstrinho da saída. =)

Como poderia ser resolvido?

public class ABC {
     public static void main(String args[]) {
          String amoEssaMusica = "ABC";
          char[] todosJuntos = { '1', '2', '3' };
          System.out.println(amoEssaMusica + " easy as " + String.valueOf( todosJuntos ) );
     }
}

Até o próximo!

Uma resposta to “Java Puzzle [#5] – Jackson 5.”

  1. papacharliefox3 said

    Como vc descobriu?? hahahaha

    Boa Mr. Cometa! :)

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: