723 Stimmen

Wie kann ich in Java Zeichenketten vergleichen?

Ich habe die == Operator in meinem Programm, um alle meine bisherigen Zeichenketten zu vergleichen. Allerdings bin ich auf einen Fehler gestoßen und habe eine davon in .equals() und der Fehler wurde dadurch behoben.

Es == schlecht? Wann sollte sie verwendet werden und wann nicht? Worin besteht der Unterschied?

41voto

James Punkte 55

Alle Objekte sind garantiert mit einer .equals() Methode, da Object eine Methode enthält, .equals() die einen booleschen Wert zurückgibt. Es ist die Aufgabe der Unterklasse, diese Methode zu überschreiben, wenn eine weitere Definition erforderlich ist. Ohne sie (d. h. mit == ) werden nur Speicheradressen zwischen zwei Objekten auf Gleichheit geprüft. String setzt dies außer Kraft .equals() Methode und gibt anstelle der Speicheradresse den Vergleich von Zeichenketten auf Zeichenebene für die Gleichheit zurück.

Ein wichtiger Hinweis ist, dass Zeichenketten in einem Klumpenpool gespeichert werden, d. h., wenn eine Zeichenkette einmal erstellt wurde, wird sie in einem Programm für immer an derselben Adresse gespeichert. Zeichenketten ändern sich nicht, sie sind unveränderlich. Aus diesem Grund ist es keine gute Idee, die reguläre String-Verkettung zu verwenden, wenn Sie eine große Menge an Strings zu verarbeiten haben. Stattdessen sollten Sie die StringBuilder Unterricht angeboten. Denken Sie daran, dass sich die Zeiger auf diese Zeichenkette ändern können, und wenn Sie wissen möchten, ob zwei Zeiger identisch sind == wäre ein guter Weg. Die Saiten selbst tun das nicht.

40voto

Sie können auch die compareTo() Methode, um zwei Strings zu vergleichen. Wenn das Ergebnis von compareTo gleich 0 ist, sind die beiden Strings gleich, andernfalls sind die verglichenen Strings nicht gleich.

Le site == vergleicht die Verweise und nicht die eigentlichen Zeichenketten. Wenn Sie jede Zeichenkette mit new String(somestring).intern() dann können Sie die == Operator, um zwei Zeichenketten zu vergleichen, ansonsten können nur die Methoden equals() oder compareTo verwendet werden.

40voto

Lijo Punkte 5634

In Java, wenn die == Operator zum Vergleich von 2 Objekten verwendet wird, prüft er, ob die Objekte auf dieselbe Stelle im Speicher verweisen. Mit anderen Worten, er prüft, ob die 2 Objektnamen im Grunde genommen Verweise auf denselben Speicherplatz sind.

Die Java String Klasse überschreibt eigentlich die Standard equals() Implementierung im Object Klasse - und überschreibt die Methode, so dass sie nur die Werte der Zeichenketten prüft, nicht deren Speicherplatz. Das bedeutet, dass wenn Sie die Methode equals() Methode zum Vergleich von 2 String Objekte, dann werden beide Objekte als gleich angesehen, solange die tatsächliche Zeichenfolge gleich ist.

Le site == Operator prüft, ob die beiden Zeichenketten genau dasselbe Objekt sind.

Le site .equals() Methode prüft, ob die beiden Zeichenketten den gleichen Wert haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X