По умолчанию компилятор Java воспринимает 2.1 как двойной (64 бита), а не как с плавающей точкой (32 бита). Объявление float f = 2,1 приведет к потере точности. Следовательно, Java заставляет вас выполнять приведение, чтобы убедиться, что вы объявляете переменную с плавающей точкой.
Без приведения вы можете достичь того же с помощью буквы 'f' в конце чисел с плавающей запятой. Например, float f=2.1f
.
Теперь вы можете спросить, почему приведение не требуется при конвертации из long в float, потому что первый использует больше внутренних битов, чем последний. Ответ в том, что Java не нуждается в преобразовании по пути расширения - byte => short => int => long => float => double.
(Слева направо (расширяющееся преобразование) - приведение не требуется;
Справа налево (сужающее преобразование) - требуется явное приведение)