Poniższa linia kodu jest akceptowane przez kompilator (sun-jdk-8u51) bez żadnych ostrzeżeń lub błędów:Dlaczego konwersja zwężenie z int na krótki nie działa, jeśli zmienna lokalna jest stosowany w trójskładnikowych operatora
short b = true ? 1 : 1;
Zważywszy najbliższych dwóch linii kodu prowadzić do błędów kompilacji (niekompatybilnych typów: możliwy stratnej konwersji z int do krótkiego):
boolean bool = true;
short s = bool ? 1 : 1;
Dlaczego kompilator nie jest w stanie wykonać tę samą narrowing conversion z p liczbę całkowitą 1 w drugim przypadku?
To dlatego, że w pierwszym przypadku, ponieważ 'TRUE to czas kompilacji stała, cała ekspresja jest oceniany podczas kompilacji, więc w zasadzie mają' krótkie B = 1; ' podczas gdy w drugiej wersji kompilator nie robi dla ciebie uproszczenia, stąd błąd. – aioobe
Powiązane (prawdopodobnie dupe): http://stackoverflow.com/questions/4711431/unexpected-output-when-using-a-ternary-operator-i-final-variable – aioobe
[conversion assignment] (http: // docs. oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.2) - jeśli wyrażenie jest wyrażeniem stałym ... można użyć zwężającej się konwersji pierwotnej ... – ZhongYu