Warum gibt es keine Warnung für null == null?

8

Eclipse zeigt eine Warnung an, wenn zwei identische Ausdrücke verglichen werden:

%Vor%

Es wird jedoch keine Warnung für null == null angezeigt (trotz der Tatsache, dass null == null immer wahr ist):

%Vor%

Gibt es einen Grund dafür?

    
fxm 20.11.2015, 14:04
quelle

2 Antworten

3

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.

    
Martin Carney 20.11.2015, 20:34
quelle
1

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.

    
isak gilbert 23.11.2015 12:36
quelle

Tags und Links