Изучите следующие фрагменты кода:
Фрагмент №1
int a=20;
int b=30;
byte c= (a>b)? 20:30;
Error:
incompatible types: possible lossy conversion from int to byte
byte c= (a>b)? 20:30;
Фрагмент № 2
int a=20;
int b=30;
byte h1=70;
byte c= (a>b)? 20:h1;
Фрагмент № 3
int a=20;
int b=30;
byte h1=70;
byte h2=89;
byte c= (a>b)? h1:h2;
Фрагмент № 4
byte c= (true)? 20:30;
Все они прекрасно компилируются, за исключением Snippet # 1. Насколько это поведение оправдано? Если Snippet # 1 выдает ошибку "возможного преобразования с потерями", Snippets # 2 и 4 также должны это делать, учитывая, что они все еще содержат литералы типа int
. Почему они успешно компилируются?