Une méthode toString qui renvoie une représentation sous forme de chaîne d'un objet en Java. Je l'utilise généralement correctement, mais j'ai vérifié la mise en œuvre du contenu
Hoge.java
public class Hoge{
@Override
public String toString(){
return "Cette classe est la classe Hoge.";
}
}
Test1.java
public class Test1{
public static void main(String[] args){
Object hoge = new Hoge();
System.out.println(hoge);
}
}
Si vous remplacez la méthode toString de manière appropriée comme ceci, C'est une fonction pratique qui affiche de bonnes choses simplement en la mettant dans l'argument de l'impression. (Le calcul lorsqu'il peut être interprété comme une chaîne de caractères est également bien géré.)
Cette fois, je voudrais confirmer cette implémentation.
Tout d'abord, à partir de Description du document.
Renvoie une représentation sous forme de chaîne de l'objet. En général, la méthode toString renvoie une chaîne qui "représente textuellement" cet objet. Ce résultat doit être concis et informatif pour la lisibilité humaine. Nous vous recommandons de remplacer cette méthode pour toutes les sous-classes. La méthode toString de la classe Object renvoie une chaîne composée du nom de la classe d'origine dans laquelle l'objet est une instance, du caractère atmark "@" et d'une représentation hexadécimale non signée du hashcode de l'objet. Autrement dit, cette méthode renvoie une chaîne égale aux valeurs suivantes:
getClass().getName() + '@' + Integer.toHexString(hashCode())
La méthode toString est implémentée dans la classe Object et par défaut Le nom de la classe et le code de hachage sont affichés.
La classe Object est une superclasse de toutes les classes Java, Toutes les classes ont une méthode toString.
La méthode toString est généralement gérée comme ceci J'ai deviné.
Vérifions si cette hypothèse est correcte.
Par exemple, l'implémentation de System.out.println
Par conséquent, lorsque Object est utilisé comme argument Vérification de l'implémentation de System.out.println,
PrintStream.java
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
De cette façon, nous appelons Object # valueOf ().
String.java
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Vérification de l'implémentation de la classe String, Si l'objet argument n'est pas nul, toString est appelé. (Évitez NullPointer)
La jointure avec l'opérateur de jointure de chaîne est basée sur la "Spécification du langage Java".
Le traitement diffère selon la version.
Comme c'est compliqué, je vais omettre les détails, mais par l'opérateur de jointure de chaîne +
Le code semble être traité comme StringBuilder.append () dans les coulisses.
L'image ressemble à ceci.
Test2.java
public class Test2{
public static void main(String[] args){
"time: " + new Date();
// new StringBuilder().append("time: ").append(new Date());
}
}
Par conséquent, vérifions l'implémentation de StringBuilder.
StringBuilder.java
@Override
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
Ah ...
# Au fait
Le tableau n'affiche pas le contenu de la liste, contrairement à la liste des tableaux.
Parfois, il est difficile de se tromper.
ArrayList superclasse, AbstractCollection
J'ai remplacé toString.
#### **`AbstractCollection.java`**
```java
public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
```
Apparemment, [le tableau est défini par la spécification du langage](https://docs.oracle.com/javase/specs/jls/se10/html/jls-10.html#jls-10.7)
En regardant cela, c'est comme ça parce que la méthode toString n'est pas remplacée.
```java
class A<T> implements Cloneable, java.io.Serializable {
public final int length = X;
public T[] clone() {
try {
return (T[])super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError(e.getMessage());
}
}
}
```
La longueur du cri du débutant, était-il définitif dans votre public ...
# À la fin
toString Pratique.
Recommended Posts