Login Registre-se

Você pode ganhar um iPad 2 na promoção do Javafree

O Portal javafree.org inicia mais uma promoção para os usuários do fórum. Quem publicar mais posts válidos (perguntas ou respostas) entre 16/4 a 13/7 levará para casa um iPad 2 de 16GB!

Clique aqui e saiba mais.
Home > Artigos > Java em Geral >

Representação textual de objetos - método toString()

Publicado por simu em 16/05/2012 - 3.081 visualizações


comentários: 1

O Java usa o método toString() toda vez que for necessário converter um objeto em String, ou seja, para obter ume representação textual do objeto. Por exemplo para imprimir um objeto qualquer usando System.out.println ou para mostrar os itens de um JComboBox (usando o Renderer padrão).

Esse método toString() é definido na classe Object, portanto é herdado por todos os objetos - todos os objetos são capazes de gerar uma representação textual. Mas o método do Object não conhece as classes derivadas, não sabe como o objeto deve ser representado. Por isso usa um padrão: o nome da classe seguido por um '@' e pelo hashCode em hexadecimal da instância em questão:


Exemplo:
vai imprimir algo como "Pessoa@1b533b0" (provavelemnte com outro número).

Esse formato normalmente não é o que queremos! Por isso temos que sobrescrever o método toString() para obter a representação desejado.
Exemplo, para mostrar o nome e a idade (entre parênteses) da pessoa, adicionamos o método toString():
dessa vez obteremos, como desejado "fulano(21)".



O mesmo problema ocorre com um vetor (Array):
irá imprimir algo como "[I@15497e0" - "[I" representa um array de int's.
O problema é que não tem como sobrescrever o toString() de um Array, mas podemos usar a classe auxiliar Arrays do pacote java.util que contém vários métodos estáticos para trabalhar com um Array. No nosso caso podemos usar o toString(int[]):
que imprime "[1, 2, 3]"@146c21b


Resumo:
Sempre que obter algo como "Classe@146c21b" é porque a classe em questão não sobrescreveu o método toString().

Solução:
Implementar/sobrescrever o método toString() do Objeto ou usar o Arrays.toString() se for um Array.


comentários: 1