"" ist eine tatsächliche Zeichenfolge, wenn auch eine leere.
null bedeutet jedoch, dass die Variable String auf nichts zeigt.
a==b
gibt false zurück, weil "" und null nicht denselben Speicherplatz belegen - mit anderen Worten, ihre Variablen zeigen nicht auf dieselben Objekte.
a.equals(b)
gibt false zurück, weil "" offensichtlich nicht gleich null ist.
Der Unterschied besteht jedoch darin, dass Sie, da "" eine tatsächliche Zeichenfolge ist, weiterhin Methoden oder Funktionen wie diese aufrufen können
a.length()
a.substring(0, 1)
und so weiter.
Wenn der String gleich Null ist, wie b, würde Java a auslösen, NullPointerException
wenn Sie versuchen, aufzurufen, sagen Sie:
b.length()
Wenn der Unterschied, über den Sie sich wundern, == gegen gleich ist, ist dies:
== vergleicht Referenzen, als ob ich gegangen wäre
String a = new String("");
String b = new String("");
System.out.println(a==b);
Das würde false ausgeben, da ich zwei verschiedene Objekte zugewiesen habe und a und b auf verschiedene Objekte zeigen.
In a.equals(b)
diesem Fall würde jedoch true zurückgegeben, da equals
for Strings nur dann true zurückgibt, wenn das Argument String nicht null ist und dieselbe Zeichenfolge darstellt.
Seien Sie jedoch gewarnt, dass Java einen Sonderfall für Strings hat.
String a = "abc";
String b = "abc";
System.out.println(a==b);
Sie würden denken, dass die Ausgabe wäre false
, da sie zwei verschiedene Strings zuordnen sollte. Tatsächlich wird Java wörtliche Strings internieren (solche, die in unserem Beispiel wie a und b initialisiert sind). Seien Sie also vorsichtig, denn dies kann zu Fehlalarmen bei der Funktionsweise von == führen.
b.equals(a)
- aber nicht==
zum Vergleichen von Zeichenfolgen verwenden, da "es nicht funktioniert" auf andere Weise. Für dennull
Wert (der sich von einer leeren Zeichenfolge""
, einer gültigen Zeichenfolgeninstanz , unterscheidet ) kann niemals eine Methode aufgerufen werden. Das Platzieren des "bekannten Nicht-Null" (normalerweise ein konstanter Wert oder ein Literal) auf der linken Seite der Gleichheit ist "Yoda-Bedingungen" oder ähnliches.