2015-02-18 14 views

Antwort

24

Es gibt keine.

Menschen werden manchmal null == a aus historischen Gründen schreiben, weil es die Möglichkeit, einen Tippfehler bedingten Fehler in C entfernt Wenn Sie schreiben würden:

if (a = NULL) { // note, only single = 
    ... 

in C, dann das wäre die Zuordnung Anweisung ausführen a = NULL, wobei das Ergebnis der Anweisung der zugewiesene Wert ist (dh NULL). Anstatt also den Wert a zu überprüfen, setzen Sie ihn auf NULL und überprüfen dann im Wesentlichen if (NULL), was immer falsch ist. Dies kompiliert, aber ist fast sicher nicht das, was Sie wollen. Und es ist alles wegen eines kleinen Tippfehlers von = vs ==.

Wenn Sie NULL zuerst setzen, dann ist if (NULL = a) ein Kompilierungsfehler, da Sie der Konstante, die NULL darstellt, keinen Wert zuweisen können.

In Java ist dies nicht erforderlich, da if (null) {... nicht kompiliert wird. (Sie können haben immer noch die gleichen Fehler in Java mit boolean Variablen. if (someBooleanVar = someMethod()) Aber das ist ein relativ seltenes Muster.)

Dieser Stil wird manchmal als „Yoda conditions“, da es von Yodas skurrilen Sprechstil erinnert ist in Krieg der Sterne.

+0

Großartige Arbeit, einschließlich historischer Kontext, sowie erklären, warum es nicht mehr anwendbar ist. – Xynariz

+0

Ehrfürchtige Erklärung – Tarik

1

Für einen == Vergleich, keine. Einzelheiten finden Sie unter JLS. Für equals ruft a.equals(null) die Methode equals auf, die in der Klasse A mit dem Parameter null definiert ist, während null.equals(a) ungültig wäre.

Sie könnten jedoch auch in Betracht ziehen, wo eine der Seiten des Vergleichs nicht unbedingt ein Nullwert ist, sondern Nullable ist. In diesem Fall (notNull und nullable sind beide lokale Variablen oder Felder eines Referenztyp:

notNull==nullable 

ist die gleiche wie

nullable==notNull 

aber

notNull.equals(nullable) 

sollten keine Nullpointer während werfen nullable.equals(notNull) wird einen werfen, wenn nullable null ist

Verwandte Themen