[JAVA] Wie man Gleichheit und Gleichheit benutzt (wie man Gleichheit benutzt)

Unterschied zwischen Äquivalenz und Äquivalenz

Als Teil, der im Java Silver-Testergebnis falsch zu sein scheint, habe ich neulich erhalten "Verwenden Sie == und equals (), um zu testen, ob eine Zeichenfolge einem anderen Objekt entspricht." Wurde erwähnt, also werde ich es als Rezension schreiben.

Referenz [Einführung in Java, die klar verstanden werden kann](

<div style = "border: 1px solid # 95a5a6; border-radius: .75rem" ; Hintergrundfarbe: #FFFFFF; Breite: 184px; Rand: 0px; Polsterung: 5px; Textausrichtung: Mitte; Überlauf: versteckt; ">
<a href = "https://hb.afl.rakuten.co.jp/ichiba/1aecd7df.780bbf06.1aecd7e0.a0859005/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F16099007%2F&_ picttext & ut = eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiI4MHg4MCIsIm5hbSI6MSwibmFtcCI6InJpZ2h0IiwiY29tIjoxLCJjb21wIjoiZG93biIsInByaWNlIjoxLCJib3IiOjEsImNvbCI6MSwiYmJ0biI6MSwicHJvZCI6MH0% 3D "target =" _ blank "rel =" nofollow gesponserte noopener "style =" word-wrap: break-word; "> <img src =" https://hbb.afl.rakuten.co.jp/ hgb / 1aecd7df.780bbf06.1aecd7e0.a0859005 /?me_id=1213310&item_id=19815844&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2F72 = 80x80 & t = picttext "border =" 0 "style =" margin: 2px "alt =" [Für den Produktpreis wird ein Link erstellt Die Informationen können sich zu diesem Zeitpunkt und zu diesem Zeitpunkt ändern. ] "title =" [In Bezug auf den Produktpreis haben sich die Informationen möglicherweise zum Zeitpunkt der Erstellung des Links und zum Zeitpunkt geändert. ] "> </ td>

<a href =" https://hb.afl.rakuten.co.jp/ichiba/1aecd7df.780bbf06.1aecd7e0.a0859005/? pc = https% 3A% 2F% 2Fitem.rakuten.co.jp% 2Fbook% 2F16099007% 2F & link_type = picttext & ut = eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiI4MHg4MCIsIm5hbSI6MSwibmFtcCI6InJpZ2h0IiwiY29tIjoxLCJjb21wIjoiZG93biIsInByaWNlIjoxLCJib3IiOjEsImNvbCI6MSwiYmJ0biI6MSwicHJvZCI6MH0% 3D "target =" _ blank "rel =" nofollow gesponserte noopener "style =" word-wrap: break-word ; "> Eine erfrischende Einführung in Java 3rd Edition [Kiyotaka Nakayama]
Preis: 2860 Yen (inklusive Steuern, kostenloser Versand) </ span> (Stand 07.08.2020) </ span> </ p> </ td> </ tr> </ table> </ div>

</ p> </ td> </ tr> </ table>)


public class Human {
  String name;
  int hp;

  public String toString(){
   return "name:" + this.name + "/age:" + this.age;
 }
}

Im obigen Fall Gleicher Wert

Urteil von (==) "Genau dieselbe Existenz" = "auf denselben Adresswert zeigen"

same.java


Human h1 = new Human("Taro")
Human h2 = h1;

Da h1 h2 zugewiesen ist, hat es dieselbe Instanz A "name: Taro". Das Referenzziel bezieht sich auch auf dieselbe Adresse bei 2112. Zu diesem Zeitpunkt gilt "h1 == h2".

Äquivalent

equals.java


Human h1 = new Human("Ziro");
Human h2 = new Human("Ziro");

Erstellen Sie jede Instanz → siehe Instanz A "Name: Ziro" → 3322 Instanz B "Name: Ziro" → 9191 "H1! = H2" gilt Der Inhalt der Zeichenfolge ist jedoch identisch Daher gilt "h1.equalsa (h2)".

Ja ich verstehe. Aber, Wenn Sie mit [Einführung in Java, das Sie klar verstehen können]([Einführung in Java, die Sie klar verstehen können]) fortfahren und das Kapitel über die API-Nutzung in der zweiten Hälfte aufrufen Es gibt eine Aussage, dass equals () nicht richtig funktioniert, es sei denn, Sie geben die Bewertungskriterien für "Was macht es gleich" an, aber es ist ein wenig verwirrend.

Folgendes funktioniert nicht richtig Beispiel 1) Vergleichen Sie zwei Personen

public class Main {
  public static void main(String[] args) {
    Human h1 = new Human();
    h1.name = "Taro";
    h1.age = 10;    

    Human h2 = new Human();
    h2.name = "Taro";
    h2.age = 10;

    if ( h1.equals(h2) == true ) {
      System.out.println("Same");
    } else {
    System.out.println("different") ;
    }
  }
}

Der Verarbeitungsinhalt von equals (), der von der Object-Klasse geerbt wurde, lautet wie folgt "Wenn die Werte gleich sind, geben Sie vorerst true zurück." Wird in Form von sein


public boolean equals(Object o) {
  if (this == o) { 
    return true; 
} else {
    return false;
  }
}

"Was als gleicher Inhalt zu betrachten ist" ist für jede Klasse unterschiedlich Muss in jedem definiert werden Mit anderen Worten, geben Sie durch "Überschreiben gleich" an.

Die Bedingung lautet: "Wenn die Namen gleich sind, werden sie als derselbe Mensch betrachtet." Dann wird es wie folgt sein


public class Human {
 String name;
 int age;

public boolean equals(Object o ) {
  if (this == o) { 
  return true;
}  if (o instanceof Human) { //Die folgende zusätzliche Überschreibung ① Bestimmen Sie, ob o in den Typ Mensch umgewandelt werden kann
  Human h = (Human)o;  //(2) Downcast-Objekttyp o bis Menschentyp und ordne ihn h zu
  if ( this.name.equals(h.name)) {
    return true; 
    }  
   }
    return false;
  }
}


"SAME" wird angezeigt

Recommended Posts