Die folgende Codezeile durch den Compiler (sun-jdk-8u51) ohne Warnungen oder Fehler ist:Warum hat die Verengung Umwandlung von int zu kurz nicht, wenn lokale Variable in dem ternären Operator verwendet wird
short b = true ? 1 : 1;
Während der nächsten zwei Codezeilen führen zu einem Übersetzungsfehler (inkompatible Typen: mögliche verlustbehaftete Umwandlung von int zu kurz):
boolean bool = true;
short s = bool ? 1 : 1;
Warum ist der Compiler nicht in der Lage die gleichen narrowing conversion des p auszuführen Rimitive Integer 1 im zweiten Fall?
Dies liegt daran, im ersten Fall, da 'true' eine Kompilierung konstant ist, der ganze Ausdruck während der Kompilierung ausgewertet, so dass Sie im Grunde haben' kurze b = 1; ' während der Compiler in der zweiten Version nicht die Vereinfachung für Sie durchführt, daher der Fehler. – aioobe
Zugehörig (möglicherweise dupe): http://stackoverflow.com/questions/4711431/unexpected-output-when-using-a-ternary-operator-and-final-variable – aioobe
[Umsetzungskonvertierung] (http: // docs. oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.2) - Wenn der Ausdruck ein konstanter Ausdruck ist ... kann die verengende primitive Konvertierung verwendet werden ... – ZhongYu