Java-Ingenieur Akuma-chan @akumachanit Demo! Heute ist eine Demo, die über String-Vergleich spricht!
** Wann sprichst du ** Demo? Akuma-chan hat ** eine Anwendung mit JDK 1.6 bei der Arbeit entwickelt ** (eine Demo, die man in der Ära von Reiwa glauben kann? Aber es ist eine ziemliche Demo, die aktualisiert werden muss!), Aber kürzlich wurde sie aktualisiert. Eine Demo, mit der Sie die Funktionen von 1.7 nutzen können!
Objects Demo mit Objects in der ab 1.7 hinzugefügten Klasse. Es scheint, dass 1.7 im Jahr 2011 veröffentlicht wurde. Ich denke, es gibt viele Leute, die dies lesen und noch keine Ingenieure geworden sind. Es tut mir leid, jetzt darüber zu sprechen. (Solch eine egoistische Demo, die zu dieser Zeit kein Ingenieur war).
Bei Verwendung der "Objects" -Methode "Objects.equals ()" habe ich die Spezifikationen vorerst überprüft. Hier ist eine Demo.
Eine Demo, die in der Objects
-Spezifikation wie folgt geschrieben ist.
Diese Klasse (...) enthält null-sichere oder null-tolerante Methoden zum Vergleichen zweier Objekte.
Mit anderen Worten, was bedeutet das?
if(a.equals("test")) { //NullPointerException, wenn a null ist
}
Wenn Sie Code wie diesen schreiben und "a" null ist, tritt "NullPointerExceptioin" auf. Es gibt keine "Gleich" -Methode (oder irgendetwas anderes) in "Null", es ist also eine natürliche Demo. In einem solchen Fall war es notwendig, zuerst die Zeichenfolge zu setzen oder zuerst die Nullprüfung durchzuführen.
if("test".equals(a)) { //Absolut NullPointerException tritt nie auf
}
if(a != null && a.equals("test")) { //Wenn null, überspringen Sie das Urteil
}
Das obige Beispiel kann nicht als Variable verwendet werden, bei der beide "null" sein können, und es ist nicht besonders schön, jedes Mal dasselbe zu schreiben wie im folgenden Beispiel!
Objects.equals()
Objects.equals ()
!! das erschien schneidig dort
Objects.equals(a, "test"); //So was
public static boolean equals(Object a, Object b) Gibt true zurück, wenn die Argumente gleich sind, andernfalls false. Daher wird true zurückgegeben, wenn beide Argumente null sind, und false, wenn nur ein Argument null ist. Andernfalls wird die Methode equals des ersten Arguments verwendet, um festzustellen, ob sie gleich sind.
Objects.equals ()
ist eine Demo, die true
zurückgibt, auch wenn beide null sind! Dies ist eine Demo, die mit der oben genannten herkömmlichen Methode nicht durchgeführt werden kann!
Nun, es ist so praktisch, "Objects.equals ()", aber was passiert, wenn Sie versuchen, Zeichenfolgen zu vergleichen?
Ich denke, jeder, der Java macht, weiß, dass ** Strings nicht zum Vergleich verwendet werden sollten **! Eine Demo, an die sich Leute, die es nicht wussten, definitiv erinnern und hierher zurückkehren werden. Es ist eine Demo, die Sie nur schwer nutzen können, ohne es zu wissen.
Zunächst eine Demo, die sich mit den Java-Spezifikationen für Gleichstellungsoperatoren befasst.
15.21. Equality Operators The equality operators may be used to compare two operands that are convertible (§5.1.8) to numeric type, or two operands of type boolean or Boolean, or two operands that are each of either reference type or the null type. All other cases result in a compile-time error.
(Geeignete Übersetzung) Äquivalenzoperatoren können zwischen "zwei Operanden, die in einen numerischen Typ konvertiert werden können", "zwischen zwei Operanden, die boolesch oder boolesch sind" und "zwischen Operanden, die Referenztyp oder Nulltyp sind" verwendet werden. Andere Muster führen zu einem Fehler bei der Kompilierung.
Da "String" ein Referenztyp ist, eine Demo zum Lesen des Vergleichs zwischen dem Referenztyp und dem "Null" -Typ.
15.21.3. Reference Equality Operators == and != At run time, the result of == is true if the operand values are both null or both refer to the same object or array; otherwise, the result is false.
(Geeignete Übersetzung) Zur Laufzeit ist das Ergebnis von == true, wenn die Werte der beiden Operanden "beide null" oder "beide beziehen sich auf dasselbe Objekt oder Array" sind, andernfalls false. ..
Mit anderen Worten, ==
ist eine Demo, die überprüft, ob die referenzierten Objekte identisch sind.
Dann eine Demo, um den Code zu sehen, der das == von String tatsächlich vergleicht.
String a = "test";
String b = "test";
System.out.println(a == b); // true
Das? Kein Problem Demo, oder? ?? ?? Wie wäre es dann mit dieser Demo?
String a = "test";
String b = new String("test");
System.out.println(a == b); // false
Das? Ist es nicht eine Demo, dass das Ergebnis "falsch" ist, nachdem "b" durch "b" ersetzt wurde? Wie wäre es dann mit dieser Demo?
String a = "test";
String b = "te".concat("st");
System.out.println(a == b); // false
Dies ist auch eine Demo, die "falsch" wurde!
Der Grund dafür ist, dass in Java ** Zeichenfolgenliteral ** (eine Zeichenfolge in doppelten Anführungszeichen wie "test") ** auf dieselbe Zeichenfolgentypinstanz verweist. **Demo. Mit anderen Worten, unabhängig davon, wie oft Sie "test" zuweisen, wird in der Demo ein Verweis auf dieselbe Instanz vom Typ "String" enthalten sein.
Das erste Beispiel ist also eine Demo, in der so etwas intern geschieht.
String x = new String("test");
String a = x;
String b = x;
System.out.println(a == b); // true
Dies ist eine leicht verständliche Demo! Da sich sowohl "a" als auch "b" auf "x" beziehen, ist es eine überzeugende Demo, dass "a == b" "wahr" ist.
Warum war es im zweiten und dritten Beispiel nicht gleich? Wenn Sie zum Generieren eines Strings "new String ()" verwenden, wird eine neue Instanz erstellt, auch wenn die Werte identisch sind. ** Demo ..
Eine Demo von "concat ()", die auch intern "new String ()" verwendet, um einen neuen String zurückzugeben. (Beachten Sie jedoch, dass concat ()
die ursprüngliche Instanz so zurückgibt, wie sie ist, wenn die Länge der Argumentzeichenfolge 0 beträgt.)
Dies ist eine Demo, in der Sie nicht == verwenden können, um Zeichenfolgen zu vergleichen. Der Grund dafür ist, dass selbst wenn die zu vergleichenden Werte von ** String
** gleich sind, keine Garantie dafür besteht, dass sie sich auf dieselbe Instanz beziehen ** Demo.
Wie können Sie also Zeichenfolgen mit unterschiedlichen Instanzen und demselben Wert überprüfen? !!
Hier kommt die Demo der Methode "String # equals ()" ins Spiel! !! !!
String#equals()
Die Methode String # equals ()
ist eine Demo, die den Wert von String überprüft!
String a = "test";
String b = new String("test");
System.out.println(a.equals(b)); // true
In Ordung! Dies ist eine Lösungsdemo! Es ist eine Demo, die an dieser Stelle keiner Erklärung bedarf.
Zum Vergleich von String
** String # equals ()
! !! Dies ist eine perfekte Demo! !! ** ** **
Die Demo, die zu sein scheint ... erreicht hier endlich das Problem am Anfang.
// String#equals()Unansehnliche Code-Demos, mit denen Sie schreiben müssen
if("test".equals(a)) { //Absolut NullPointerException tritt nie auf
}
if(a != null && a.equals("test")) { //Wenn null, überspringen Sie das Urteil
}
Hmmmm! Die Demo, zu der ich endlich gekommen bin! Hier ist die Produktionsdemo!
Die Demo, die ich am Anfang erwähnt habe, ist, dass "# Objects.equals ()" null "prüft, und wenn Sie" null "vergleichen, wird" true "zurückgegeben!
String a = null;
String b = null;
Objects.equals(a, b); // true -Führt nicht zu NullPointerException
String a = null;
String b = "test";
Objects.equals(a, b); // false -Führt nicht zu NullPointerException
Also eine Demo, die mich wundern ließ. ** Was passiert mit String-Vergleichen? ** ** **
Der Grund, warum ich darüber nachgedacht habe, ist, dass "String # equals ()" eigentlich eine Demo ist, die Werte vergleicht, aber die übergeordnete Klasse "Object" hat "Object # equals ()" ist **. Demo-Vergleich ** referenzierter Instanzen anstelle von Werten. Genauer gesagt, eine Demo, die intern == verwendet.
// Object#equals()
public boolean equals(Object obj) {
return (this == obj);
}
String # equals ()
ist eine Demo, die ** Object # equals () `überschreibt und den Prozess neu schreibt **.
Wenn Sie also wissen, dass "Objects # equals ()" "Object" heißt, verhält es sich also genauso wie "Object # equals"? Ich dachte, es wäre eine Demo. Die Antwort ist die Demo, die in den eingangs beschriebenen Methodenspezifikationen beschrieben ist.
~ (Weggelassen) Andernfalls wird die Methode equals des ersten Arguments verwendet, um festzustellen, ob sie gleich sind.
Eine Demo, in der die Methode "equals" ** des ersten Arguments angegeben wird, wenn beide Argumente nicht "null" sind. Mit anderen Worten, wenn Sie dem ersten Argument einen Wert vom Typ "String" übergeben, werden die Werte verglichen. Wenn das erste Argument nicht "String" und das zweite Argument "String" ist, ist es sowieso falsch, sodass der Inhalt der Argument "equals" -Methode eine irrelevante Demo ist.
equals ()
häufig auf diese Weise verwendet. Überschreiben Sie sie also nicht richtig! Das ist eine Demo, die ich beim nächsten Mal wieder schreiben werde.** Demo mit Objects.equals ()! !! !! ** ** **
Offizielles Orakelzeug und dies und Demos.
Recommended Posts