O método toString do Java
Wellington Domiciano
Posted on April 5, 2022
Criou uma classe maneira e na hora de mostrar o resultado com print()
viu uns números estranhos?
class User {
private String name;
private int age;
User(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String... args) {
User user = new User("João", 29);
System.out.println(user); // Apenas um ex.: User@1a2b3c
}
}
Não se preocupe, a sua classe está apenas usando o método toString()
implementado na classe Object
.
Nesta implementação é usado o nome da classe seguido pelo símbolo @ e finalizando com o hashcode do objeto (mas em hexadecimal).
Dá para atestar isso com o código abaixo.
class User {
private String name;
private int age;
User(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String... args) {
User user = new User("João", 29);
String className = user.getClass().getName();
int hashCode = user.hashCode();
String myToString = className + '@' + Integer.toHexString(hashCode);
System.out.println(user.toString().equals(myToString)); // true
}
}
Ou olhando a documentação.
Ou olhando o código fonte.
Porém, somos livres para sobrescrever este método e deixar do jeito que quisermos.
class User {
private String name;
private int age;
User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User[name=" + name + ", age=" + age + "]";
}
}
O jeito mostrado no exemplo acima é parecido com o que algumas IDEs geram automaticamente. Mas, na minha opinião, há formas mais elegantes de obter o mesmo resultado, veja:
@Override
public String toString() {
return String.format("User[name=%s, age=%d]", name, age);
}
Ou, com Java 17 ou mais recente:
@Override
public String toString() {
return "User[name=%s, age=%d]".formatted(name, age);
}
O que achou? Não ficou muito mais fácil de ler?
Arrays também usam a implementação padrão e uma das opções mais simples que temos para mostrar o seu conteúdo é com o método Arrays.toString()
, veja:
import java.util.Arrays;
public class Main {
public static void main(String... args) {
int[] numbers = { 1, 2, 3 };
System.out.println(Arrays.toString(numbers)); // [1, 2, 3]
}
}
Se for um array de arrays, toString()
não é o bastante. Precisamos do deepToString()
:
import java.util.Arrays;
public class Main {
public static void main(String... args) {
int[][] numbers = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
System.out.println(Arrays.deepToString(numbers)); // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
}
}
Agora estamos prontos para deixarmos os nossos objetos mais apresentáveis!
Posted on April 5, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.