Organisierte den Vergleich von String-Typ-Werten.
== -Für primitive Typen vergleichen Sie die Werte. -Im Objekttyp werden die Referenzwerte der Objekte verglichen, um festzustellen, ob die Objekte gleich sind.
equals() Es kann nur im Objekttyp verwendet werden, und der Inhalt der Objekte wird verglichen, um festzustellen, ob die Objekte denselben Wert haben.
Mit anderen Worten, der Typ Strng ist ein Referenztypobjekt, sodass Sie gleich verwenden können.
StringSample.java
String str1 = "A";
String str2 = "A";
String str3 = new String("A");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
if(str1 == str2) {
System.out.println("TRUE");
}else {
System.out.println("FALSE");
}
if(str1 == str3) {
System.out.println("TRUE");
}else {
System.out.println("FALSE");
}
100
100
TRUE
Es wurde WAHR. Ist es in Ordnung, den String-Typ mit == zu vergleichen?
Der String-Typ erstellt bei der Initialisierung einen Wert im Heap-Bereich, der jedoch anscheinend wiederverwendet wird, wenn derselbe Wert verwendet wird.
Verwenden Sie zum Speichern von Speicher den Bereich (Adresse = 100), in dem der Wert "A" ohne Neu übereinstimmt.
Wenn Sie den Wert der Variablen neu schreiben, wird der Referenzquellenwert (Adresse = 100) nicht geändert, aber das Referenzziel wird geändert, indem der neue Bereich von "B" neu erstellt wird. (Die Referenzadresse wurde von 100 auf 200 geändert.)
String.class
private final char value[];
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value; //Wert des eigenen Objekts
char v2[] = anotherString.value; //Wert des verglichenen Objekts
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i]) //Zerlegen Sie String in char und vergleichen Sie Werte
return false;
i++;
}
return true;
}
}
return false;
}
Das String-Objekt wird in char [] zerlegt und die Werte werden einzeln verglichen.
Zeichenfolgenobjekte können für verschiedene lokale Variablen denselben Referenzwert (Referenzadresse) haben, wenn sie denselben Wert zum Speichern von Speicher haben. Dies ist jedoch nicht garantiert und sollte mit gleich verglichen werden.
Recommended Posts