Die Methode equals () mit String und Object in Java verwenden

7
%Vor%

Es gibt false zurück. Es kann true zurückgeben, wenn der Kommentar entfernt wurde.

Warum gilt das nicht für die Klasse String ?

%Vor%

Es gibt true zurück. Warum? (Weil String Praktikanten oder etwas anderes verwendet?)

    
Tiny 21.10.2012, 20:39
quelle

6 Antworten

17

Weil gleich ist () für String vergleicht den Inhalt, nicht das Objekt selbst.

  

public boolean ist gleich (Object anObject)

     

Vergleicht diese Zeichenfolge mit dem angegebenen Objekt. Das Ergebnis ist nur dann wahr, wenn das Argument nicht null ist und ein Objekt String ist, das die gleiche Zeichenfolge wie dieses Objekt darstellt.

%Vor%

(Link zur Quelle von String.equals () )

Im Gegensatz zu Gleich ist für Objekt :

  

Die equals-Methode für die Klasse Object implementiert die höchstmögliche Äquivalenzrelation für Objekte; Das heißt, für alle Nicht-Null-Referenzwerte x und y gibt diese Methode true zurück, wenn x und y sich auf dasselbe Objekt beziehen ( x == y hat den Wert true ).

%Vor%

(Link zur Quelle von Object.equals () )

Vergessen Sie auch nicht den Vertrag der Funktion equals() :

  

Die equals-Methode implementiert eine Äquivalenzbeziehung für Nicht-Null-Objektreferenzen:

     
  • Es ist reflexiv : Für jeden Nicht-Null-Referenzwert x sollte x.equals(x) den Wert true zurückgeben.
  •   
  • Es ist symmetrisch : Für alle Nicht-Null-Referenzwerte x und y sollte x.equals(y) genau dann true zurückgeben, wenn y.equals(x) true zurückgibt.
  •   
  • Es ist transitiv : für alle Nicht-Null-Referenzwerte x , y und z , wenn x.equals(y) true zurückgibt und y.equals(z) returns true , dann sollte x.equals(z) true zurückgeben.
  •   
  • Es ist konsistent : Für alle Nicht-Null-Referenzwerte x und y geben mehrere Aufrufe von x.equals(y) konsistent true zurück oder geben konsistent false zurück, vorausgesetzt, es liegen keine Informationen vor in Gleich-Vergleichen auf den Objekten verwendet wird geändert.
  •   
  • Für jeden Nicht-Null-Referenzwert x sollte x.equals(null) false zurückgeben.
  •   

Auch empfohlen zu lesen:

ppeterka 21.10.2012, 20:40
quelle
8

equals für Object vergleicht Speicherreferenzen.
Daher ist es falsch, da sie unterschiedlich sind Object s
equals für String wird überschrieben, um basierend auf Zeichen zu vergleichen.
Sie haben 2 leere String -Objekte, weshalb equals true zurückgibt.

    
Cratylus 21.10.2012 20:41
quelle
4

== vergleicht Adressen der Objekte / Strings / irgendetwas

.equals() wurde entwickelt, um den internen Status der Objekte zum Vergleich zu verwenden.

Also:

new Object() == new Object() => false - zwei separate Objekte an verschiedenen Adressen im Speicher.

new String("a") == new String("a") => false - die gleiche Situation - zwei separate Adressen für die String-Objekte.

new String("a").equals(new String("a")) => true - Adressen unterscheiden sich, aber Java nimmt einen Objektzustand ('a') und vergleicht es mit anderen Objektzuständen ('a'), werden sie gleich gefunden und melden wahr.

Mit der Methode equals () können Sie den Vergleich so programmieren, wie es für Ihr Programm geeignet ist.

intern() ist eine etwas andere Geschichte. Es ist beabsichtigt, dasselbe Objekt (Adresse) für dieselbe Char-Sequenz zurückzugeben. Es ist nützlich, die Menge an Speicher zu reduzieren, die benötigt wird, wenn Sie mehrere Zeichenfolgen gleichzeitig konstruieren.

new String("aaa").intern() sucht im Maschinenspeicher, wenn jemand zuvor eine "aaa" Zeichenkette erstellt hat und gibt die erste Instanz der Zeichenkette zurück ... Wenn nicht gefunden wurde - die aktuelle wird als erste und alle eingetragen weiter "aaa" .intern () und new String("aaa").intern() und ("a"+"aa").intern() geben diese "erste" Instanz zurück.

Vorsicht: "aaa".intern() ist keine sehr schnelle Operation und wenn Sie alle Strings internieren, sparen Sie etwas Speicher, verlieren aber eine Menge CPU-Arbeit.

    
ya_pulser 21.10.2012 21:09
quelle
2

Das in der Klasse equals implementierte Object vergleicht nur Referenzen. Hier ist der Quellcode:

%Vor%     
Daniel Pereira 21.10.2012 20:42
quelle
2
Die Methode

equals muss in der Klasse außer Kraft gesetzt werden, wenn sie sich anders verhalten soll. Standardmäßig prüft es, ob sich zwei Referenzen auf dasselbe Objekt beziehen.

    
Victor Mukherjee 21.10.2012 20:45
quelle
1

Die Methode equals() der Klasse Object kann Strings nicht vergleichen, sie kann nur Objekte vergleichen. Zum Vergleichen von Zeichenfolgen überschreibt eine Zeichenfolgenklasse die equals() -Methode und vergleicht Zeichenfolgen darin.

Object.equals() vergleicht nur Referenzen, wobei String.equals() Werte vergleicht.

    
Muhammed Younus Attari 08.09.2014 16:20
quelle

Tags und Links