La seguente riga di codice viene accettato dal compilatore (sun-jdk-8u51) senza eventuali avvisi o errori:Perché la conversione restringimento da int a breve non funziona se la variabile locale viene utilizzato nella operatore ternario
short b = true ? 1 : 1;
considerando che le prossime due linee di codice portano ad un errore di compilazione (tipi incompatibili: possibile conversione lossy da int a breve):
boolean bool = true;
short s = bool ? 1 : 1;
Perché il compilatore non è in grado di eseguire lo stesso narrowing conversion della p intero rimitivo 1 nel secondo caso?
Questo perché nel primo caso, dal momento che 'true' è un momento della compilazione costante, l'intera espressione viene valutata durante la fase di compilazione, in modo da avere praticamente' breve b = 1; ' mentre nella seconda versione, il compilatore non fa la semplificazione per te, quindi l'errore. – aioobe
Correlati (possibilmente dupe): http://stackoverflow.com/questions/4711431/unexpected-output-when-using-a-ternary-operator-and-final-variable – aioobe
[conversione di assegnazione] (http: // docs. oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.2) - se l'espressione è un'espressione costante ... è possibile utilizzare la conversione primitiva restringente ... – ZhongYu