Es hilft, darüber nachzudenken, was diese Warnbedingung verhindern soll. Sie soll Sie warnen, dass Sie die beiden Variablen, die Sie vergleichen wollten, nicht vergleichen, z. B. aufgrund eines Tippfehlers (zB foo == foo
, wenn Sie foo == boo
oder foo == fpp
meinten) oder zweier Literalwerte (zB 1 == 1
).
(Natürlich stellt der Vergleich von zwei Literalwerten ein anderes Problem dar - das Ergebnis wird immer das gleiche sein und sollte sowieso nur in true
oder false
im Code vereinfacht werden.)
null == null
ist kein Fall dieses potentiellen Problems. Wenn Sie eine Variable etwas benennen, die nahe an "null" ist und dann versehentlich "null" schreibt, haben Sie ein völlig anderes Problem, das kein Compiler erraten kann.
Für primitive -Typen wie int und char ist der Wert dem Compiler bekannt. Sie können sie vergleichen und es wird sofort als identische Werte erkannt, die eine Warnung verursachen.
Zum Beispiel:
%Vor%Oder sogar:
%Vor%Für Objekte ist der Wert dem Compiler noch nicht bekannt. Es wurde kein Speicherplatz im Speicher reserviert, an dem dieser Wert liegt. Der Verweis auf den Wert muss zur Laufzeit überprüft werden, selbst wenn es sich um die Nullreferenz handelt.
Zum Beispiel:
%Vor%oder
%Vor%Sie erhalten jedoch eine Warnung, wenn Sie ein Objekt mit sich selbst vergleichen. Dies liegt daran, dass Sie dieses Objekt explizit definiert haben, sodass der Compiler weiß, dass es identisch ist, ohne dass der Wert überprüft werden muss.