char c1 = 123; //Compiles fine
char c2 = 123456; //Error: cannot convert from int to char
Java достаточно умен, чтобы определить, достаточно ли целого числа для преобразования в символ. Почему он не способен преобразовать очень маленькие литералы с плавающей запятой в float ?. Например:char c = некоторый целочисленный литерал может скомпилировать, но float f = некоторый литерал с плавающей запятой никогда не будет компилироваться. Зачем?
float f1 = 0.3; //Error: cannot convert from double to float
float f2 = 0.3f; //Compiles fine
полукокс с = некоторыми целым числом буквальным может составить, но всплывает п = некоторые с плавающей точкой буквальной никогда не компилировать. Зачем?
PS: Я знаю, что с плавающей точкой буквальной рассматривается как двойные по умолчанию
Возможный дубликат [Java: зачем вам нужно указывать «f» в потоковом литерале?] (Http://stackoverflow.com/questions/14102955/java-why-do-you-need- to-define-af-in-a-float-literal) – RealSkeptic
Мой вопрос не о символах 'f' в литералах с плавающей точкой. Речь идет о том, как больший тип данных преобразуется в меньший тип данных без каких-либо проблем в одном случае (int to char, 32 бит до 16 бит), в то время как он дает ошибку компиляции в другом случае (double to float, от 64 до 32 бит). Литерал достаточно мал, чтобы соответствовать переменной float, так же как int был маленьким достаточно, чтобы соответствовать char. @ RealSkeptic –
Ответ тем не менее в этом вопросе - лучший ответ не принят. – RealSkeptic