Warum funktioniert die Eingrenzung der Konvertierung von int in short nicht, wenn die lokale Variable im ternären Operator verwendet wird?

9

Die folgende Codezeile wird vom Compiler (sun-jdk-8u51) ohne Warnungen oder Fehler akzeptiert:

%Vor%

Während die nächsten zwei Codezeilen zu einem Kompilierungsfehler führen ( inkompatible Typen: mögliche verlustbehaftete Konvertierung von int in kurz ):

%Vor%

Warum ist der Compiler nicht in der Lage, dieselbe Engpasskonvertierung der primitiven Ganzzahl 1 im zweiten Fall?

    
rene 11.11.2015, 12:18
quelle

1 Antwort

3

Wie von @aioobe in den Kommentaren beschrieben:

  

Weil im ersten Fall true eine Kompilierzeitkonstante ist, wird der gesamte Ausdruck während der Kompilierzeit ausgewertet, also haben Sie grundsätzlich short b = 1; , während in der zweiten Version der Compiler die Vereinfachung nicht tut für dich, daher der Fehler

Das Hinzufügen von final zur Deklaration der Variablen bool macht es zu einer konstanten Variable, die es dem Compiler ermöglicht, den Code wie oben erwähnt zu interpretieren.

%Vor%

Siehe Abschnitt 4.12.4

    
rene 28.11.2016, 16:13
quelle

Tags und Links