Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida sobre o método toString() do pacote java.lang

Olá,

No código abaixo:

public class Test {

    public static void main(String[] args) {

        String[] colors = {"red", "white", "blue", "black", "yellow", "purple", "tan", "pink"};
        List<String> list = new ArrayList<String>(Arrays.asList(colors));

        System.out.println(list);
        System.out.println(colors);
    }
}

Resulta: [red, white, blue, black, yellow, purple, tan, pink] [Ljava.lang.String;@2a139a55

Imaginava que o toString() aplicado ao colors também devesse retornar as strings desse array.

Fico grato se alguém puder me explicar o por quê de não estar retornando as strings do array colors.

Obrigado.

5 respostas

Tiago,

o que está acontecendo no seu código que como é um array de String , para poder imprimir cada cor é necessário percorrer dentro desse array , e do jeito que está ele está imprimindo o toString da Variavel colors .

fiz uma alteração no seu código :

public class Teste {

    public static void main(String[] args) {

        String[] colors = {"red", "white", "blue", "black", "yellow", "purple", "tan", "pink"};
        List<String> list = new ArrayList<String>(Arrays.asList(colors));

        System.out.println(list);

        System.out.print("[");
        for (String cor : list) {
             System.out.print( cor + ", ");

        }
        System.out.print("]");

    }
}

Espero ter ajudado .

solução!

Ola, Tiago Pasito Schultz !

Vamos entender por partes:

1º - O método toString() do tipo String, ele retorna o valor atual atribuído:

Ex.: String cor = "vermelho";

Ao executar: System.out.println(cor);

ou System.out.println(cor.toString());

Resultado: vermelho

2º - A Implementação do método toString() do seu ArrayList() percorre todos os itens da sua coleção retornando o toString() do tipo definido para sua coleção, nesse caso é do tipo String. List<String> list = new ArrayList<String>()

3º - Diferente do ArrayList(), no caso do seu array 'String[]' não existe uma implementação especifica para o toString() onde ele percorre cada item do seu array, para esse caso esta sendo exibido o toString() default, que exibe o endereço de memória onde seu array esta alocado.

Muito obrigado pela atenção. Por gentileza, mais uma dúvida.

O código abaixo funciona a implementação do método toString().

public class BinarySearchTest {

private String[] colors = {"red", "white", "blue", "black", "yellow", "purple", "tan", "pink"};

public static void main(String[] args) {

BinarySearchTest obj = new BinarySearchTest();

System.out.println(obj); }

public String toString() {

String result = "";

for(String color : this.colors) result += color + " ";

return result; } }

Entretanto a seguinte implementação não entendi o porquê de não retornar a string "teste".

public class BinarySearchTest {

static private String[] colors = {"red", "white", "blue", "black", "yellow", "purple", "tan", "pink"};

public static void main(String[] args) {

System.out.println(BinarySearchTest.colors); }

public String toString() {

return "teste"; } }

Como ela retorna "[Ljava.lang.String;@2a139a55" acredito que minha implementação do toString() não esteja sendo chamada.

Gratidão pela troca de conhecimento.

Boa Tarde, Tiago Pasito Schultz !

Note que você implementou o toString() para sua Classe BinarySearchTest, ou seja, para vc obter o resultado: "teste", como você deixou fixo no toString(). Seria necessário por exemplo vc instanciar sua classe BinarySearchTest e printar o conteudo dessa instancia:

Ex.: BinarySearchTest b = new BinarySearchTest(); System.out.println(b); ou System.out.println(b.toString());

No seu código, você fez isso:

System.out.println(BinarySearchTest.colors); }

Fazendo dessa forma, voltamos a imprimir o toString() default do seu array:

String[] colors = {"red", "white", "blue", "black", "yellow", "purple", "tan", "pink"};

Certo ?

Sim entendi.

Nesse caso não estou usando o toString() implementado por mim, mas sim o default. Já que para usar meu método tenho que ter uma instância da minha classe.

Obrigado :)