Wie Vergleiche ich strings in Java?
Habe ich mit der ==
Betreiber in meinem Programm zu vergleichen, alle meine Saiten so weit.
Aber ich lief in einen Fehler, veränderte Sie in .equals()
statt, und es der Fehler behoben.
Ist ==
schlecht? Wenn sollte es und sollte es nicht verwendet werden? Was ist der Unterschied?
Auch seine gut zu wissen, dass, wenn Sie overridding .equals () - Methode, stellen Sie sicher, dass Sie overridding .hashcode () - Methode, sonst werden Sie am Ende mit gegen aquivalenzrelation b/w equals und hashcode. Für mehr info siehe java-doc.
Verlassen Sie einen link zu meiner Erklärung, warum
Nie mit == testen, ob die Strings sind die gleichen, es sei denn, Sie genießen das aufspüren von subtilen Fehlern und das Studium der Feinheiten des Java-String-Praktikum-Prozess.
Verlassen Sie einen link zu meiner Erklärung, warum
==
so wie es ist funktioniert auf Objekte: stackoverflow.com/a/19966154/2284641==
funktioniert etwas von der Zeit, als java einen String-pool, wo er versucht, die Wiederverwendung von Speicher-Referenzen von Häufig verwendeten strings. Aber ==
vergleicht, dass Objekte, die gleich sind, nicht die Werte... also .equals()
ist die ordnungsgemäße Nutzung, die Sie verwenden möchten.Nie mit == testen, ob die Strings sind die gleichen, es sei denn, Sie genießen das aufspüren von subtilen Fehlern und das Studium der Feinheiten des Java-String-Praktikum-Prozess.
"12"=="1"+2
ist falsch (wahrscheinlich)InformationsquelleAutor |
Du musst angemeldet sein, um einen Kommentar abzugeben.
==
tests für Referenz-Gleichheit (ob Sie das gleiche Objekt)..equals()
- tests für den Wert der Geschlechter (ob Sie logisch "gleich").Objekte.equals() überprüft
null
vor dem Aufruf.equals()
so dass Sie nicht haben, um (ab JDK7, auch in Guave).String.contentEquals() vergleicht den Inhalt der
String
mit dem InhaltCharSequence
(seit Java 1.5).Also, wenn Sie wollen, um zu testen, ob zwei strings denselben Wert haben, werden Sie wahrscheinlich verwenden wollen
Objects.equals()
.Du fast immer verwenden möchten
Objects.equals()
. In der selten situation, wo Sie wissen Sie beschäftigen sich mit der interniert Saiten, Sie kann Verwendung==
.Vom JLS 3.10.5. Zeichenfolge-Literale:
Ähnliche Beispiele finden sich auch in JLS-3.10.5-1.
compareTo ist in der Regel für die Sortierung verwendet.
Nur ein Hinweis:
equals()
genau Vergleicht diese Zeichenfolge in eine andere Zeichenfolge, ABERequalsIgnoreCase()
Vergleicht diesen String an einen anderen String, ignoring case überlegungenWir können das Gegenteil sagen. verwenden Sie Immer
equals()
es sei denn, Sie einen guten Grund dafür haben. Was Sie unter Sicherheit ist völlig Kontext-abhängig. Zum Beispiel, wenn man Passwörter, um zu bestimmen, ob der Benutzer das richtige Passwort eingegeben, es ist unsichere zu ignorieren groß-und Kleinschreibung.Ein kleiner edit, == ist nicht "viel billiger" als .gleich, denn die erste Anweisung im String.gleich liest: if (this == anObject) { return true; }.
InformationsquelleAutor
==
tests Objektreferenzen.equals()
tests die string-Werte.Manchmal sieht es aus, als ob
==
vergleicht Werte, weil Java hat einige hinter-den-kulissen Material, um sicher identisch mit in-line strings sind eigentlich das gleiche Objekt.Beispiel:
Aber Hüte dich vor den Nullen!
==
Griffenull
Saiten gut, aber das aufrufen.equals()
aus einer null-Zeichenfolge zu einer Ausnahme führen:Also, wenn Sie wissen, dass
fooString1
kann null sein, sagen die Leser, dass durch das schreibenDie folgenden kürzer, aber es ist weniger offensichtlich, dass es prüft, ob null (ab Java 7):
==
immer die Werte zu vergleichen! (Es ist nur so, dass bestimmte Werte sind Referenzen!)Ach, es ist keine statische Methode isNullOrEmpty(), und keine benutzerdefinierte überladen von Operatoren, die macht das Teil von Java clunkier als in C# oder Python. Und da Java nicht über extension Methoden, Sie können nicht schreiben, Ihr eigenes Werkzeug zu erweitern java.lang.String. Richtig? Irgendwelche Gedanken auf Unterklassen von String, hinzufügen, dass statische utility-Methode, und dann immer mit MyString statt? Eine statische Methode mit zwei Parametern, die das tun, null-sichere Vergleiche wäre schön, in, die Unterklasse zu.
Groovy macht das ein wenig einfacher mit der safe navigation operator (groovy.codehaus.org/...),
?.
. Das würde konvertierennullString1?.equals(nullString2);
in eine völlig null-Aussage. Jedoch, es hilft nicht, wenn SievalidString?.equals(nullString);
-, dass immer noch eine exception wirft.Kurze Methoden zu vergleichen nullable-strings in java: stackoverflow.com/questions/11271554/...
Java unterstützt die Unterklassen und erstellen eigene Methode. Doch nur wenige Klassen markiert sind, endgültig aus bestimmten Gründen, String ist einer von Ihnen, so können wir nicht verlängern. Wir schaffen eine andere Klasse und make-utility-Klasse, die zwei Strings als Argumente und Umsetzung unserer Logik. Auch für null einige andere Bibliotheken wie spring und apache gut aus, er Sammlungen von Methoden, die man nutzen kann.
InformationsquelleAutor
==
vergleicht die Objektreferenzen..equals()
vergleicht String-Werte.Manchmal
==
gibt Illusionen von vergleichen von String-Werten, wie in folgenden Fällen:Dies ist, weil bei der Erstellung einer String-literal, die JVM sucht für das literal im String-pool, und wenn es eine übereinstimmung findet, wird der gleiche Verweis wird auf die neue Zeichenfolge. Weil dieses, erhalten wir:
(a==b) ===> true
Jedoch
==
fehlschlägt, in dem folgenden Fall:In diesem Fall für
new String("test")
die Anweisung new String auf dem heap erstellt, und dass die Referenz wirdb
, sob
wird eine Referenz auf den heap, nicht in der String-pool.Nun
a
verweist auf einen String im String-pool, währendb
verweist auf einen String auf dem heap. Deshalb erhalten wir:if(a==b) ===> false.
Während
.equals()
vergleicht immer den Wert der Zeichenfolge, so gibt es wahr in beiden Fällen:Also mit
.equals()
ist immer besser.Objekt-Klasse
.equals()
Methode vergleicht die Instanzen(Referenzen/Adresse), wobei als String-Klasse.equals()
Methoden überschrieben, um zu vergleichen, - Inhalt(chars)Gute wies auf String-pool-versus Java-heap-Unterschiede, als Sie werden sicherlich nicht die gleiche. In der string-pool-Java versucht "cache"
String
Objekte zu speichern Speicherbedarf alsString
ist bekannt dafür, dass Sie unveränderlich (ich hoffe ich sage es richtig hier). Überprüfen Sie auch, stackoverflow.com/questions/3052442/...InformationsquelleAutor
Den
==
- operator überprüft, um zu sehen, wenn die zwei Zeichenketten sind genau das gleiche Objekt.Den
.equals()
Methode prüft, ob zwei strings denselben Wert haben.Sie können auch verwenden .compareTo () - Methode, wenn Sie evaluieren möchten, um von strings.
InformationsquelleAutor
Strings in Java unveränderlich sind. Das bedeutet, dass, wenn Sie versuchen, zu ändern, ändern Sie die Zeichenfolge, die Sie mit einer neuen Instanz. Sie können nicht ändern, die ursprüngliche Zeichenfolge. Dies wurde getan, so dass diese string-Instanzen zwischengespeichert werden können. Ein typisches Programm enthält eine Menge von string-Referenzen und-Zwischenspeicherung dieser Instanzen kann verringern Sie den Speicherbedarf und erhöht die performance des Programms.
Wenn mit = = - operator für string-Vergleich sind Sie nicht zu vergleichen den Inhalt von string, aber eigentlich den Vergleich der Speicher-Adresse. Wenn Sie sind beide gleich, wird true zurückgegeben, andernfalls false. In der Erwägung, dass equals in string vergleicht den string-Inhalt.
Also die Frage ist, ob alle Saiten sind-Cache in das system, wie kommt
==
gibt false zurück, in der Erwägung, dass equals true zurück? Gut, das ist möglich. Wenn Sie einen neuen string wieString str = new String("Testing")
Sie am Ende erstellen Sie einen neuen string in den cache, auch wenn der cache enthält bereits eine Zeichenkette mit dem gleichen Inhalt. In kurzen"MyString" == new String("MyString")
wird immer false zurückgeben.Java spricht auch über die Funktion intern() auf einem string, damit es Teil des Caches so
"MyString" == new String("MyString").intern()
wird true zurückgegeben.Hinweis: = = - operator ist viel schneller als gleich, nur weil Sie vergleichen zwei Speicher-Adressen, aber Sie müssen sicher sein, dass der code nicht erzeugen neue String-Instanzen im code. Sonst werden Sie mal bugs.
InformationsquelleAutor
Stellen Sie sicher, dass Sie verstehen, warum. Es ist, weil der
==
Vergleich nur vergleicht Referenzen; dieequals()
Methode wird eine Zeichen-für-Zeichen-Vergleich von den Inhalten.Beim Aufruf neu für
a
undb
, jeder bekommt eine neue Referenz, die Punkte auf der"foo"
in der string-Tabelle. Die Bezüge sind anders, aber der Inhalt ist der gleiche.InformationsquelleAutor
Ja, es ist schlimm...
==
bedeutet, dass Ihr zwei string-Referenzen sind genau das gleiche Objekt. Sie haben vielleicht gehört, dass dies der Fall ist, weil Java hält Art von literal-Tabelle (das tut es), aber das ist nicht immer der Fall. Einige Texte werden auf unterschiedliche Weise geladen, die aus anderen Saiten, etc., so müssen Sie nie davon ausgehen, dass zwei identische Zeichenfolgen gespeichert sind, in der gleichen Lage.Gleich ist der Reale Vergleich für Sie.
InformationsquelleAutor
Ja,
==
ist schlecht zum vergleichen von Strings (Objekte wirklich, es sei denn, Sie wissen, Sie sind kanonisch).==
nur vergleicht Objekt-Referenzen..equals()
tests für Gleichheit. Für Streicher, oft werden Sie die gleichen sein, aber wie Sie entdeckt haben, dass nicht garantiert immer.InformationsquelleAutor
Java ein String-pool, unter denen Java verwaltet die Zuweisung von Speicher für den String-Objekte. SehenString Pools in Java
Wenn Sie überprüfen (vergleichen) von zwei Objekten mit Hilfe der
==
operator vergleicht es die Adresse der Geschlechter in den string-pool. Wenn die beiden String-Objekte haben die gleiche Adresse verweisen dann zurücktrue
, sonstfalse
. Aber wenn Sie wollen, vergleichen die Inhalte von zwei String-Objekte sind, dann müssen Sie das überschreiben derequals
Methode.equals
ist eigentlich die Methode der Object-Klasse, aber er nicht in der String-Klasse und eine neue definition gegeben, die vergleicht den Inhalt des Objekts.Aber Verstand es achtet auf die Schreibweise von String. Wenn Sie möchten, dass die groß /Kleinschreibung bei vergleichen, dann müssen Sie gehen für den equalsIgnoreCase Methode der String-Klasse.
Let ' s Finden Sie unter:
er hat Hinzugefügt
equalsIgnoreCase
die möglicherweise informativ für den Neuling auf.InformationsquelleAutor
==
vergleicht Objekt-Referenzen in Java, und das ist keine Ausnahme fürString
Objekte.Für den Vergleich zwischen den tatsächlichen Inhalt der Objekte (einschließlich
String
), muss man dieequals
Methode.Wenn ein Vergleich von zwei
String
Objekte mit==
entpuppt sichtrue
, das ist, weil dieString
Objekte interniert waren, und die Java Virtual Machine ist, dass mehrere Referenzen auf die gleiche Instanz vonString
. Man sollte nicht erwarten, dass der Vergleich einString
- Objekt, das den gleichen Inhalt wie eine andereString
Objekt mit==
zu bewerten alstrue
.InformationsquelleAutor
Ich Stimme mit der Antwort von zacherates.
Aber was Sie tun können, ist zu nennen
intern()
auf Ihre nicht-literalen strings verwendet werden.Vom zacherates Beispiel:
Wenn Sie intern nicht-literalen String-Gleichheit ist
true
==
für string-Vergleich.InformationsquelleAutor
.equals()
vergleicht die Daten in einer Klasse ist (vorausgesetzt, die Funktion implementiert ist).==
vergleicht Zeiger Standorten (Lage des Objekts im Speicher).==
gibt true zurück, wenn beide Objekte (NICHT REDEN "PRIMITIVE") auf das GLEICHE Objekt-Instanz..equals()
gibt true zurück, wenn die zwei Objekte enthalten die gleichen Daten dieequals()
im Vergleich zu==
in JavaDie Ihnen helfen können.
InformationsquelleAutor
==
führt eine Referenz Gleichheit überprüfen, ob die 2 Objekte (strings, in diesem Fall) beziehen sich auf das gleiche Objekt im Speicher.Den
equals()
Methode wird geprüft, ob die Inhalt oder die Staaten 2 Objekte gleich sind.Offensichtlich
==
ist schneller, aber (möglicherweise) falschen Ergebnisse in vielen Fällen, wenn Sie wollen einfach nur zu sagen, wenn 2String
s halten Sie den gleichen text.Jeden Fall die Verwendung von
equals()
Methode empfohlen.Mach dir keine sorgen über die Leistung. Einige Dinge zu fördern, mit
String.equals()
:String.equals()
wird zuerst überprüft, Referenz-Gleichheit (mit==
), und wenn die 2 strings sind die gleichen, die durch Verweis, keine weitere Berechnung durchgeführt!String.equals()
Nächstes überprüfen Sie die Längen der Saiten. Dies ist auch eine schnelle operation, da dieString
Klasse speichert die Länge der Zeichenfolge, keine Notwendigkeit zum zählen der Zeichen oder die code-Punkte. Wenn sich die Längen unterscheiden, ist keine weitere Prüfung durchgeführt wird, wir wissen, dass Sie nicht gleich sein können.Wenn alles gesagt und getan ist, auch wenn wir garantieren, dass die strings sind die Praktikanten, die mit der
equals()
- Methode noch nicht, dass overhead, dass man denken könnte, auf jeden Fall ist der empfohlene Weg. Wenn Sie möchten, eine effiziente überprüfung der Referenzen, dann verwenden Enumerationen, wo es gewährleistet ist, durch die Sprache-Spezifikation und Implementierung, die den gleichen enum-Wert wird das gleiche Objekt (Verweis).Obviously == is faster
-- eigentlich ist die Umsetzung von.equals(String)
ersten Prüfungen==
etwas anderes vor, so würde ich sagen, die Geschwindigkeit ist etwa gleich.public boolean equals(Object anObject) { if (this == anObject) { return true; } ...
InformationsquelleAutor
Wenn Sie wie ich, als ich begann, mit Java wollte ich mit dem "= = " - operator überprüft, ob zwei String-Instanzen gleich waren, aber für besser oder schlechter, das ist nicht der richtige Weg, es zu tun in Java.
In diesem tutorial werde ich Ihnen zeigen, verschiedene Möglichkeiten, um den Vergleich Java-strings, beginnend mit dem Ansatz, den ich verwenden die meisten der Zeit. Am Ende dieses Java-String-Vergleich-tutorial werde ich auch diskutieren, warum das "==" operator funktioniert nicht, wenn Vergleich von Java-strings.
Option 1: Java-String-Vergleich mit der equals-Methode
Die meisten der Zeit (vielleicht 95% der Zeit), Vergleiche ich die strings mit der equals-Methode der Java-String-Klasse wie folgt:
Dieser String equals-Methode sieht die zwei Java-strings, und wenn Sie enthalten die exakt gleiche Reihe von Zeichen, werden Sie als gleich angesehen.
Sich ein Blick auf eine schnelle String-Vergleich Beispiel mit der equals-Methode, wenn die folgenden Tests wurden ausgeführt, die zwei Zeichenfolgen als gleich gelten, weil die Zeichen sind nicht genau das gleiche (der Fall der Charaktere ist anders):
Aber, wenn die beiden Zeichenfolgen enthalten, die genau die gleiche Zeichenfolge, die equals-Methode true zurück, wie in diesem Beispiel:
Option 2: String-Vergleich mit der Methode equalsIgnoreCase
In einigen string-Vergleich tests, die Sie ignorieren möchten, ob die Zeichenfolgen in groß-oder Kleinbuchstaben. Wenn Sie testen möchten, Ihre strings auf Gleichheit in diesem Kleinschreibung, verwenden Sie die equalsIgnoreCase-Methode der String-Klasse wie folgt:
Option 3: Java-String-Vergleich mit der compareTo-Methode
Gibt es auch eine Dritte, weniger verbreitete Methode zum vergleichen von Java-strings, und das ist mit der compareTo-Methode der String-Klasse. Wenn die zwei Zeichenketten sind genau die gleichen, die compareTo-Methode einen Rückgabewert von 0 (null). Hier ein kurzes Beispiel, was diese Zeichenfolge Vergleich Ansatz sieht wie folgt aus:
Während ich Schreibe, über das Konzept der Gleichheit in Java, ist es wichtig zu beachten, dass die Java-Sprache enthält eine equals-Methode in der Java-Basis-Objekt-Klasse. Wenn Sie erstellen Sie Ihre eigenen Objekte, und Sie möchten, um ein Mittel zu sehen, wenn Sie zwei Instanzen des Objekts "gleich", Sie überschreiben sollten, (und Umsetzung) diese equals-Methode in deiner Klasse (in der gleichen Weise die Java-Sprache bietet diese Gleichheit/Vergleich Verhalten in der String-equals-Methode).
Haben möchten Sie vielleicht einen Blick auf diese ==, .equals(), compareTo () und compare()
In google apps script "compareTo" ist nicht möglich. Ich habe versucht nur "entspricht" Dies war die einzige Lösung, die funktioniert....
InformationsquelleAutor
Funktion:
Test:
Die Frage nach der Differenz zwischen
==
undequals
wurde schon beantwortet von anderen Lösungen, die ich eben angeboten, eine andere Methode zum vergleichen von strings in einer lockeren Art und WeiseInformationsquelleAutor
Den
==
Betreiber überprüfen, ob zwei Referenzen auf das gleiche Objekt zeigen oder nicht..equals()
überprüfen Sie für den eigentlichen string-Inhalt (Wert).Beachten Sie, dass die
.equals()
Methode gehört zur KlasseObject
(Oberklasse aller Klassen). Sie müssen, um es zu überschreiben, da Sie pro Klasse Voraussetzung, aber für String-es ist bereits umgesetzt, und es wird überprüft, ob zwei strings den gleichen Wert haben oder nicht.Fall 1
Grund: String-Literale erzeugt, ohne null gespeichert im String-pool in der permgen Bereich heap. Also beide s1 und s2 auf das selbe Objekt zeigen in den pool.
Fall 2
Grund: Wenn Sie ein String-Objekt mit der
new
Schlüsselwort ein separater Raum ist reserviert auf dem heap.InformationsquelleAutor
==
vergleicht die Referenz mit dem Wert von Objekten in der Erwägung, dass dieequals()
Verfahren das in derjava.lang.String
Klasse vergleicht den Inhalt derString
Objekt (einem anderen Objekt).equals()
- Methode fürString
ist eigentlich in derString
Klasse, nicht inObject
. Die Standardequals()
inObject
würde nicht vergleichen Sie, dass die Inhalte sind die gleichen, und in der Tat nur true zurück, wenn die Referenz gleich ist.Der link oben funktioniert nicht mehr, da GrepCode down ist. Hier ist die alternative für die equals-Implementierung : [Inline-Link] (zgrepcode.com/java/openjdk/10.0.2/java.base/java/lang/...)
InformationsquelleAutor
Ich denke, wenn Sie definieren ein
String
Sie ein Objekt definieren. So müssen Sie.equals()
. Wenn Sie primitive Datentypen, die Sie verwenden==
aber mitString
(und jedes Objekt) müssen Sie.equals()
."char[]" ist nicht ein primitiver Datentyp! Es ist ein array von "char". Und arrays sind keine primitiven Datentypen selbst.
InformationsquelleAutor
Wenn die
equals()
Methode ist in derjava.lang.Object
Klasse, und es wird erwartet, um zu überprüfen, für die Gleichwertigkeit der Zustand der Objekte! Das bedeutet, der Inhalt der Objekte. In der Erwägung, dass die==
operator erwartet wird, zu prüfen, die tatsächliche Objekt-Instanzen gleich sind oder nicht.Beispiel
Betrachten zwei verschiedene Referenz-Variablen
str1
undstr2
:Wenn Sie die
equals()
Erhalten Sie die Ausgabe als
TRUE
wenn Sie==
.Jetzt bekommen Sie die
FALSE
als Ausgang, da beidestr1
undstr2
verweisen auf zwei verschiedene Objekte, obwohl beide den gleichen string-Inhalt. Es ist, weil dernew String()
wird ein neues Objekt erstellt jedes mal.InformationsquelleAutor
Betreiber == ist immer gemeint für Objekt Referenz Vergleich, in der Erwägung, dass die String-Klasse .equals () - - Methode überschrieben, die für Inhalt Vergleich:
InformationsquelleAutor
Alle Objekte sind garantiert ein
.equals()
- Methode, da-Objekt enthält eine Methode, die.equals()
, die einen booleschen Wert zurückgibt. Es ist die Unterklasse' job zum überschreiben Sie diese Methode, wenn eine weitere Definition definition erforderlich ist. Ohne ihn (also mit==
) nur Speicher-Adressen werden überprüft, die zwischen zwei Objekte auf Gleichheit. String überschreibt diese.equals()
Methode und statt mit der memory-Adresse gibt es den Vergleich von strings auf der Charakter-Ebene für die Gleichstellung.Einen Schlüssel beachten ist, dass Zeichenketten gespeichert sind, in einem Klumpen pool, so dass, sobald eine Zeichenfolge erstellt haben, ist es für immer gespeichert in einem Programm, an der gleichen Adresse. Saiten ändern sich nicht, Sie sind unveränderlich. Dies ist der Grund, warum es eine schlechte Idee, verwenden Sie normale string-Verkettung, wenn Sie eine ernsthafte Menge von string-Verarbeitung zu tun. Stattdessen verwenden Sie die
StringBuilder
Klassen zur Verfügung gestellt. Denken Sie daran, den Zeiger auf diesen string ändern kann, und wenn Sie waren daran interessiert zu sehen, wenn zwei Zeiger wurden die gleichen==
wäre eine feine Art zu gehen. Saiten selbst nicht.final String
Variablen) und Zeichenfolgen, die Ihr Programm explizit Praktikanten werden gespeichert in dem, was Sie rufen ein "Kloß-pool". Alle anderenString
Objekte unterliegen der garbage collection einmal gibt es keine mehr live-Referenzen, genau wie jede andere Art von Objekt. Auch während der Unveränderlichkeit ist erforderlich für die gesamte Praktikum Mechanismus zu arbeiten, es ist ansonsten irrelevant für diese.String-Vergleich erfolgt entweder durch equals oder equalsIgnoreCase Methode, die tatsächlich vergleicht den Inhalt der Zeichenfolge. Aber = das = - Zeichen einfach mal die Referenz Werte. Für string-Literale sind von der string-pool funktioniert gut für diesen Fall. String s1 = new String("a"); String s2 = new String("a"); in diesem Fall s1==s2 ist falsch, aber s1.equals(s2) true ist.
InformationsquelleAutor
Können Sie auch die
compareTo()
Methode zum vergleichen zweier Zeichenfolgen. Wenn die compareTo-Ergebnis ist 0, dann sind die beiden strings gleich sind, sonst die strings, die verglichen werden, sind nicht gleich.Den
==
vergleicht die Referenzen und nicht zu vergleichen die tatsächlichen Zeichenfolgen. Wenn Sie nicht erstellen, jeden string mitnew String(somestring).intern()
dann können Sie die==
- operator zum vergleichen von zwei strings, da sonst equals() oder compareTo-Methoden können nur verwendet werden.InformationsquelleAutor
In Java, wenn der "==" operator wird verwendet, um zu vergleichen 2 Objekte, prüft es, ob die Objekte verweisen auf die gleiche Stelle im Speicher. In anderen Worten, es wird überprüft, um zu sehen, ob die 2-Objekt-Namen werden grundsätzlich Referenzen auf den gleichen Speicherbereich.
Die Java-String-Klasse überschreibt die Standard-equals () - Implementierung in der Klasse Object – und es überschreibt die Methode so, dass es prüft nur die Werte der Zeichenfolgen, nicht mit deren Position im Speicher.
Dies bedeutet, dass wenn Sie rufen Sie die equals () - Methode zu vergleichen 2 String-Objekten, so lange wie die tatsächliche Reihenfolge der Zeichen ist gleich, beide Objekte als gleich betrachtet werden.
Nein, es wird nicht Abstürzen, es wirft eine NullPointerException, wodurch der Vergleich nicht stattfinden.
InformationsquelleAutor