Почему литерал типа double (подходящий для float) не авто-преобразовывается в float? Но при этом, аналогичным образом, подходящий литерал int авто-преобразовывается в byte, short?
byte a = 1; // литарел типа int, к byte еденица подходит – всё работает
float b = 1.0; // Ошибка: "Несоответствие типов: невозможно преобразовать double в float". Но ситуация аналогична команде выше!
Хотелось бы понять логику, соответствующую и первой и второй команде.
По умолчанию, литерал 1.0 имеет тип double. Автоматически преобразовать тип double во float нельзя, потому-что может быть утрачена точность числа (точность типа float меньше, чем типа double). Следует явно указать преобразование типов для переменных. Для литералов можно указывать суффикс f или F, например:
float b = 1.0f;
float c = 1.0F;
double d = 1.0;
float e = (float) d;
float f = (float) 1.0; // так тоже можно
float f = dF; // так нельзя, суффикс F применим только к литералам
Продвижение своими сайтами как стратегия роста и независимости