4
respostas

Não consegui entender o real objetivo do toString

Qual o diferencial do toString? Por que ela é útil?

Eu não poderia criar um outro método para retornar a mesma coisa? Não entendi o porquê de usar o toSring.

Ex:

 @Override
    public String toString() {
        return this.nome + ": " + this.idade;
    }
4 respostas

Ola Caroline , quando você tem o toString na classe assim que ela é invocada sem chamar nem um método ela imprime p/ você o que esta no toString e não a referência de memória do objeto faça um teste e veja você mesma..

public class Teste
{
    // Retire o toString e vai imprimir a referência do objeto em memória
       @Override
       public String toString() {
              return "Olá eu sou a classe teste ";
    }
}

public class ClassePrincipal
{
public static void main(String args[])
{
    Teste teste = new Teste();
    // Vai imprimir o conteúdo do toString caso tenha
    System.out.print(teste);
}
}

Ou seja, é um modo de retornar algo sem a necessidade de chamar o método de maneira manual? Mas não há uma outra maneira de fazer isso? Não lembro se é pela interface... Desculpa, ainda sou iniciante no assunto kkk

O método toString existe por padrão em todas as classes, ele é herdado da classe Object, tem por objetivo retornar uma representação String do objeto.

Você até poderia criar um método que tem o mesmo fim mas para utiliza-lo você teria que usar explicitamente, por exemplo:

Pessoa pessoa = new Pessoa();
pessoa.nome = "Caroline";
System.out.println(pessoa.seuMetodoPersonalizado());
//Retornando aquilo que foi definido no seu método.

Ao sobrescrever o método toString() você pode retornar o seu objeto como String sem ter que invocar o método que faz isso, por exemplo:

public class Pessoa {
    String nome;

    @Override
    public String toString() {
        return "nome: " + this.nome;
    }
}

class Program {
    public static void main(String[] args) {

        Pessoa pessoa = new Pessoa();
        pessoa.nome = "Caroline";

        /**
            Perceba que basta inserir o objeto dentro do sysout,
            não precisa chamar o método que faz isso.
        **/
        System.out.println(pessoa);

        //Retorna: nome: Caroline.
    }
}

Espero ter sanado a sua dúvida.

Tinha ficado com a mesma dúvida residual... como que simplesmente colocando o toString assim porque sim, na hora de mandar fazer system.out do objeto, ele pega justamente o método toString?! Para mim é uma coisa implícita que não fica muito clara, pois é um comportamento do java que não conseguimos ver melhor o que ele faz por tras dos panos.