Java-Gleichstellungen sind ziemlich unangenehm

Einführung

Hallo, das ist Kechon. ** Schreibst du Java? ** ** ** Ich habe in den letzten Monaten nicht codiert. Ich begann hastig Java Java zu studieren (ab heute) Ich möchte es vorstellen, weil ich mich damals unwohl fühlte.

Was war unangenehm

Wie vergleichen Sie Zeichenfolgen, wenn Sie sie vergleichen?

Für Amateurprogrammierer

String str1 = "test";
String str2 = "test";
if (str1 == str2) {
	System.out.print("same");
} else {
	System.out.print("diff");
}

Ja, das ist nicht gut. Ich werde wütend, wenn ich diesen Code schreibe. Ja, ich bin. Der Operator "==" vergleicht die Speicheradressen von Objekten.

Unterschiedliche Objekte haben grundsätzlich unterschiedliche Speicheradressen. Dieses Mal möchte ich die Zeichenfolge des Objekts vergleichen, was meiner Absicht widerspricht.

**, aber in diesem Fall wird "same" ausgegeben. ** ** ** Seien Sie vorsichtig, da der String selbst unangenehm ist. Es ist nicht das Hauptthema und ich kenne es nicht im Detail, deshalb werde ich es weglassen.

Für allgemeine Programmierer

String str1 = "1";
String str2 = "1";
if (str1.equals(str2)) {
	System.out.print("same");
} else {
	System.out.print("diff");
}

Es ist normal. Ich sehe es oft. Aber haben Sie jemals den Inhalt von Object.equals gesehen?

Der Inhalt ist ...

public boolean equals(Object obj) {
    return (this == obj);
}

** "==" Benutze es!

Ich war wütend, als ich wütend auf "==" war.

Zusammenfassung

Der Zeichenfolgenvergleich ist für equals und "==" gleich ????

Nein, nein

** Natürlich nicht. ** ** **

Die equals-Methode wird von der String-Klasse überschrieben. Unten finden Sie den Inhalt von String.equals.

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String aString = (String)anObject;
        if (coder() == aString.coder()) {
            return isLatin1() ? StringLatin1.equals(value, aString.value)
                              : StringUTF16.equals(value, aString.value);
        }
    }
    return false;
}

Dies verwendet auch "==", aber wenn die Speicheradresse unterschiedlich ist, wird ein weiterer Vergleich durchgeführt.

Zusammenfassung

Object.equals ist nur ein Vergleich mit "==" String.equals wird mit "==" verglichen, aber wenn das Vergleichsziel eine Zeichenfolge ist, verhält es sich speziell (dies ist die erwartete Bewegung).

Recommended Posts

Java-Gleichstellungen sind ziemlich unangenehm
[Java] Unterschied zwischen == und gleich
[Java Silver] Über gleich Methode
[Java] HashCode und gleich Überschreibung
Was sind Java-Metriken? _Memo_20200818
Warum werden Klassenvariablen benötigt? [Java]
[Java-Anfänger] == Operator und Gleiche Methode
Java-Array-Variablen sind Referenztypen
Verstehe gleich und hashCode in Java
Lokale Java-Variablen sind threadsicher
[Java] Was sind Überschreibungen und Überladungen?