Galera, estava estudando aqui e me deparei com o método toString(), em que ele retorna uma String (lógico), segue o trecho:
O método toString de um objeto é chamado implicitamente quando o objeto é utilizado onde uma String é esperada (por exemplo, quando printf gera saída do objeto como uma String utilizando o especificador de
formato %s ou quando o objeto é concatenado para uma String utilizando o operador +). Para que esse comportamento ocorra, toString
deve ser declarada com o cabeçalho public String toString().
Esse método não precisa ser chamado para retornar a String? Em que circunstância esse método vai retornar a String?
Olá
Todas as classes são implicitamente estendidas da classe Object e a classe Object possui o método toString.
Se usar o Netbeans, toda vez que vc implementar o toString, será solicitado para inserir a annotation Override, que significa que está sobrescrevendo um método.
É claro que para retornar a string, o método precisa ser chamado.
Exemplo:
public class Pessoa {
String nome;
public Pessoa(String nome) {
this.nome = nome;
}
public static void main(String[] args) {
imprime("Teste");
// >>> Teste
Object p1 = new Pessoa("Joao");
imprime(p1);
// >>> Pessoa???????
Object p2 = new Pessoa("Maria") {
public String toString() {
return this.nome;
}
};
imprime(p2);
// >>> Maria
Object p3 = new Pessoa("Roberto") {
public String toString() {
// super.toString() o super faz referência a classe estendida mais próxima que possua o método toString, que é a Object
return super.toString() + " " + this.nome;
}
};
imprime(p3);
// >>> Pessoa??????? Roberto
}
public static void imprime(Object o) {
System.out.println(o.toString());
}
}
Além do que o @diego12 explicou, o método toString() por default vai ser sempre chamado quando você for for apresentar alguma coisa para o usuário ou concatenar valores com outra string.