Como las formas de representar un número en su programa son muy variadas, los diseñadores de Java tuvieron que elegir y asignar cada formulario al caso de uso más común. Para los formularios seleccionados como predeterminados, el sufijo que denota el tipo exacto es opcional.
- Para literales enteros (int, largo), el valor predeterminado es int. Por razones obvias .
- Para literales de punto flotante (flotante, doble) el valor predeterminado es doble. Porque usar el doble potencialmente permite más seguro aritmético en los valores almacenados .
Por lo tanto, cuando se escribe 12
en su programa, eso es un int literal, en contraposición a 12L
, que es una larga . Y cuando escribe 12.3
, eso es doble literal, a diferencia de 12.3F
, que es flotador.
Entonces, ¿dónde es esto relevante? Principalmente al manejar downcasts o reducir conversiones. Cada vez que desciende un largo a un int, o un doble a un float, existe la posibilidad de pérdida de datos.Por lo tanto, el compilador le obligará a indicar que realmente que desee realizar la conversión de restricción, señalizando un error de compilación para algo como esto:
float f = 12.3;
Debido a 12.3 representa un doble, que tiene que explícitamente echarlo a flotar (básicamente terminando en la conversión de estrechamiento). De lo contrario, podría indicar que el número es realmente un flotante, usando el sufijo correcto;
float f = 12.3f;
Así también resumir, tener que especificar un sufijo para anhela y flotadores es un compromiso de los diseñadores del lenguaje eligieron, con el fin de equilibrar la necesidad de especificar qué es exactamente un número es, con la flexibilidad de convertir números de un tipo de almacenamiento a otro.
La misma pregunta: [Java: ¿Por qué necesita especificar una 'f' en un literal flotante?] (Http://stackoverflow.com/questions/14102955/java-why-do-you-need-to- especifica-af-en-un-flotante-literal) –