a) Не должно ли следующее присваивание вызывать ошибку, поскольку число 100 является литералом типа int и поскольку компилятор не допускает неявных сужений конверсий?Литералы и неявное сужение конверсий
byte b = 100;
б) Если компилятор не жалуется неявным сужающее преобразованием из междунар буквального к типу байты, то почему не он также позволяет неявное преобразования сужающегося от двойных literal to type float (я понимаю, мы могли бы избежать этой ошибки, указав плавающий литерал с использованием суффикса F/f)?
byte b=16; //OK
float f1=16.9; //error
спасибо
Правила преобразования с плавающей запятой назад, но это то, что они есть. Нет никакой веской причины, почему 'float f = (float) (1.0/10.0);' должен требовать typecast ('f' будет содержать наиболее точное представление 0,1, возможного для его типа), но' double d = 1.0f/10.0 f; 'будет компилироваться без предупреждения, даже если значение, присвоенное' d' (относительно точности двойника), не должно быть около 0,1. – supercat