==
vergleicht Adressen der Objekte/Strings/alles
.equals()
entworfen zum Vergleich internen Zustand der Objekte zu verwenden.
So:
new Object() == new Object() => false
- zwei separates Objekt an verschiedenen Orten 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 Objektstatus ('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 ein bisschen anders aus. 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 die gleichen Strings mehrmals erstellt werden.
new String("aaa").intern()
wird im Maschinenspeicher suchen, wenn jemals jemand "aaa" Zeichenkette vorher erstellt hat und die erste Instanz der Zeichenkette zurückgibt ... Wenn nicht gefunden wurde - die aktuelle wird als erste und alle weiteren eingetragen "aaa" .intern() und neu String("aaa").intern()
und ("a"+"aa").intern()
werden diese "erste" Instanz zurückgeben.
Vorsicht: "aaa".intern()
ist nicht sehr schnelle Operation und wenn Sie alle Zeichenfolgen internieren - Sie sparen etwas Speicher, aber wird eine Menge CPU-Arbeit verlieren.
Neben der 'Object' Klasse, geschieht das Gleiche mit einer Klasse, die wir erstellen. Warum? Wird die Klassenmethode 'Object' verwendet? – Tiny
@Tiny Wenn Sie 'equals' in Ihrer Klasse nicht überschreiben, erbt es die 'equals'-Methode von Object. – assylias
@Tiny Da jede Klasse von Object abstammt. Sie sollten die Methoden 'equals()' und 'hashCode()' für Ihre eigenen Klassen außer Kraft setzen, andernfalls werden sie die der 'Object'-Klasse verwenden. – ppeterka