Seltsame NullPointerException

W

Wangnick

Gast
Ich kann mir folgende seltsame NullPointerException nicht erklären:

Java:
Float f1 = false? 1.2f: null;
System.out.println( f1 );
Float f2 = false? 1.2f: false? 2.3f: null;
System.out.println( f2 );

Wieso funktioniert f1 und f2 nicht?
 

Murray

Top Contributor
f1 funktioniert, weil hier der Compiler erkennt, dass diese Zuweisung immer null ist; er optimiert den ganzen Ausdruck mit dem ternären Operator weg und erzeugt den gleichen Bytecode wie bei
Java:
float f1 = (Float)null;
Bei f2 geht der Compiler mit der Analyse offenbar nicht soweit, dass er auch hier den konstanten Ausdruck erkennen und eliminieren würde.
Setze mal spaßeshalber statt false eine Variable ein, dann passiert auch bei f1 keine Optimierung, und es knallt schon da.
 
W

Wangnick

Gast
Leider nein. Variable oder boolean Konstante macht keinen Unterschied.

Tatsächlich passiert mir das in einem komplexeren Code. Ich hab hier nur soweit möglich vereinfacht.
 

eRaaaa

Top Contributor
Wenn man dekompiliert, sieht man dass bei f2 ungefähr so etwas entsteht:

Java:
 Float f2 = null.floatValue();
 

Murray

Top Contributor
Leider nein. Variable oder boolean Konstante macht keinen Unterschied.
Zumindest mit dem JDK 1.6.0_17 unter Windows tut es das.

Auf jeden Fall ist dieses Konstrukt falsch und müsste eigentlich immer eine NPE bringen.

Der Ausdruck <Bedingung> ? 1.0f : null liefert als Ergbnis ein float; der Typ des ersten Operanden bestimmt den Wert des Ausdrucks. Deshalb muss der zweite Parameter auch in einen float gewandelt werden (quasi Auto-Unboxing) - und das geht schief.

//Edit: deswegen funktioniert es auch, wenn man schreibt
Java:
Float f2 = false ? (Float)1.2f: (false? 2.3f: null);
Wenn der erste Operand ein Float ist, dann muss beim zweiten kein Unboxing stattfinden udn alles ist gut.
 
Zuletzt bearbeitet:
W

Wangnick

Gast
Ich lese gerade langspec-3.0 para 15.25 und verstehe immer weniger was hierbei passiert.
 
W

Wangnick

Gast
Der Ausdruck <Bedingung> ? 1.0f : null liefert als Ergbnis ein float; der Typ des ersten Operanden bestimmt den Wert des Ausdrucks. Deshalb muss der zweite Parameter auch in einen float gewandelt werden (quasi Auto-Unboxing) - und das geht schief.

Nach langspec-3.0 para 15.25 sind beide Wertoperanden gleichwertig. Der Fall wird dort wie folgt beschrieben:
"Otherwise, the second and third operands are of types S1 and S2 respectively. Let T1 be the type that results from applying boxing conversion to S1, and let T2 be the type that results from applying boxing conversion to S2. The type of the conditional expression is the result of applying capture conversion (§5.1.10) to lub(T1, T2) (§15.12.2.7)."

Für false?1.0f:null ist also T1 Float (nach boxing) und T2 der Nulltyp. Was ist dann lub(T1,T2)? Float? Der Nulltyp? Object?

false?1.0f:null evaluiert zu null. Wieso ergibt dann false?1.0f:(false?1.0f:null) nicht auch null?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Seltsame Bytecode-Größe Java Basics - Anfänger-Themen 22
F Seltsame Dateiauslesung Java Basics - Anfänger-Themen 28
J Bug? Seltsame Fehlermeldung Java Basics - Anfänger-Themen 7
A Datums-Differenzen mit LocalDate (Java 8) - Seltsame Differenzwerte Java Basics - Anfänger-Themen 2
A Seltsame Zeichen vor Clienteingabe Java Basics - Anfänger-Themen 5
L buffered reader produziert zu viele und seltsame zeichen Java Basics - Anfänger-Themen 2
T Seltsame Layoutveränderug Java Basics - Anfänger-Themen 6
A Seltsame Class Cast Exception Java Basics - Anfänger-Themen 3
F Seltsame Zeichen und kein Zeichenumbruch mit Filewriter Java Basics - Anfänger-Themen 4
T Seltsame Runtime-Fehlermeldung Java Basics - Anfänger-Themen 4
T RandomAccessFile erzeugt seltsame Zeichen Java Basics - Anfänger-Themen 2
C seltsame schleife Java Basics - Anfänger-Themen 6
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
C Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 10
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
berserkerdq2 Nullpointerexception, obwohl ich Array initialisiere? Java Basics - Anfänger-Themen 1
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
Jose05 Nullpointerexception Java Basics - Anfänger-Themen 7
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
Jose05 Nullpointerexception bei Umwandlung von String zu int Java Basics - Anfänger-Themen 2
H Java NullPointerException Java Basics - Anfänger-Themen 4
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
L Threads Komischer NullPointerException Java Basics - Anfänger-Themen 2
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
D NullPointerException im Array Java Basics - Anfänger-Themen 4
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
V NullPointerException Java Basics - Anfänger-Themen 2
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
scratchy1 NullPointerException Java Basics - Anfänger-Themen 19
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
W Optional<T> - NullPointerException Java Basics - Anfänger-Themen 37
Jascha NullPointerException vs NumberFormatException Java Basics - Anfänger-Themen 5
L Variablen NullPointerException bei Dateigröße (Nr.1) Java Basics - Anfänger-Themen 4
M Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 13
D NullPointerException umgehen Java Basics - Anfänger-Themen 17
Z Objekt Array führt zum NullPointerException Java Basics - Anfänger-Themen 2
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
W ArrayList NullPointerException Java Basics - Anfänger-Themen 4
A NullPointerException Java Basics - Anfänger-Themen 6
S NullPointerException Java Basics - Anfänger-Themen 4
T OOP Wörterbuch NullPointerException Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
O NullPointerException Java Basics - Anfänger-Themen 2
M Interpreter-Fehler Feld NullPointerException Java Basics - Anfänger-Themen 4
L Variablen Unerklärliche NullPointerException Java Basics - Anfänger-Themen 2
E Compiler-Fehler nullPointerException in verschachteltem Modell Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert Threads NullPointerException Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
kodela NullPointerException Java Basics - Anfänger-Themen 12
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
H NullPointerException obwohl Objekt angelegt wurde Java Basics - Anfänger-Themen 1
A Threads Reentrantlock | NullpointerException möglicher Deadlock? Java Basics - Anfänger-Themen 0
K Compiler-Fehler NullPointerException lösen Java Basics - Anfänger-Themen 16
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
P Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 1
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S Methoden Methode funktioniert nicht | NullPointerException Java Basics - Anfänger-Themen 6
F NullpointerException bei zweidimensionalem Array Java Basics - Anfänger-Themen 2
Z OOP - Array ständig NullPointerException Java Basics - Anfänger-Themen 4
J Verstehe die NullPointerException nicht Java Basics - Anfänger-Themen 1
T Nullpointerexception und es wird nichts angezeigt Java Basics - Anfänger-Themen 15
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
B ProcessMessage NullPointerException Java Basics - Anfänger-Themen 11
shiroX Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 9
MrSnake ItemListener mit NullPointerException Java Basics - Anfänger-Themen 3
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
M NullPointerException Java Basics - Anfänger-Themen 8
B Vererbung NullPointerException Java Basics - Anfänger-Themen 38
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
G NullPointerException Java Basics - Anfänger-Themen 1
J NullpointerException Java Basics - Anfänger-Themen 1
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
M String-Vergleich und NullPointerException Java Basics - Anfänger-Themen 4
D Java Fehler: NullPointerException Java Basics - Anfänger-Themen 1
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
X Problem mit NullPointerException Java Basics - Anfänger-Themen 2
K NullPointerException in der Hashtable Java Basics - Anfänger-Themen 4
S Interpreter-Fehler Hilfestellung bei einer NullPointerException Java Basics - Anfänger-Themen 1
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
L NullPointerException Java Basics - Anfänger-Themen 11
M Nullpointerexception??? Java Basics - Anfänger-Themen 2
W NullPointerException bei DefaultListModel Java Basics - Anfänger-Themen 5
N NullPointerException bei Konsolenausgabe Java Basics - Anfänger-Themen 5
J Klasse in Klasse; NullPointerException Java Basics - Anfänger-Themen 8
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben