2010-12-02 11 views
33

he visto algunos de estos símbolos, pero no puedo encontrar nada extraño con ella,¿Qué significa F y D al final de los literales numéricos?

double d = 5D; 
float f = 3.0F; 

¿Qué significa la D y F detrás 5 significa exactamente?

+0

Para aquellos viniendo de C: 1) el sufijo 'd' no existe en ANSI C, solo como una extensión de GNU. 2) '1f' no es posible en C, debe usar' 1.0f'. 3) Para los enteros hexadecimales, 'd' y' f' no funcionan ya que serían ambiguos con el número mismo, p. '0x1f' es' 31', no '1.0f' –

Respuesta

38

Significa que estos números son dobles y flotantes, respectivamente. Suponga que tiene

void foo(int x); 
void foo(float x); 
void foo(double x); 

y luego llamar

foo(5) 

el compilador podría estar perplejo. Es por eso que puede decir 5, 5f o 5.0 para especificar el tipo.

+0

con esto, ¿es 5.0 == 5d? – Ungeheuer

0

Define el tipo de datos para las constantes 5 y 3.0.

2

D significa doble y F significa flotación. En ocasiones deberá agregar estos modificadores, ya que 5 se considera un número entero en este caso, y 3.0 es un doble.

5

Son especificadores de formato para literales float y double. Cuando escribe 1.0, es ambiguo si pretende que el literal sea flotante o doble. Al escribir 1.0f, le está diciendo a Java que tiene la intención de que el literal sea un flotante, mientras que el uso de 1.0d especifica que debe ser un doble. También hay L, lo que representa larga (por ejemplo, 1L es una long 1, en contraposición a una int 1)

+1

Para aclarar: no es ambiguo para javac, solo para los programadores menos experimentados. JLS dice que '1.0' sin sufijo es un doble. –

14

D significa doble

F para el flotador

se puede leer en la primitiva básica tipos de java aquí

http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

me gustaría señalar que la escritura

5.1d o 5.1: si no se especifica una carta tipo para un número de coma entonces por defecto es el doble

5: sin el período de, por defecto es un int

+0

+1 para el enlace –

0

Como otros tienen mencionaron que son las definiciones de Tipo, sin embargo, es menos probable que veas que yo o he mencionado, ya que estos son los valores predeterminados.

float myfloat = 0.5; 

habrá error Al igual que el 0,5 es un doble por defecto y no se puede AUTOBOX abajo de doble flotar (64 -> 32 bits), pero

double mydouble = 0.5; 

no tendrá ningún problema

+0

* "autobox" * es la terminología incorrecta para lo que usted describe. Lo que quieres decir es lo opuesto a la promoción, que sería la degradación, pero no hay reglas (automáticas) para eso. – Tom

+0

Acabo de realizar el curso Oracle Java SE8 Java Programmer, aquí mismo en las notas, valores predeterminados y el hecho de que el autoboxing/unboxing no ocurre con reducción de precisión y por lo tanto se requiere definición de tipo o conversión para reducción de precisión. como la definición de tipo –

+0

[Autoboxing/unboxing] (https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html) se produce cuando uno (o el compilador) "convierte" un tipo primitivo a su correspondiente envoltura tipo 'int' ->' Entero'. De lo que estás hablando es lo opuesto a [promoción] (http://stackoverflow.com/questions/1660856/promotion-in-java) y sí, no hay conversión automática debido a la pérdida de precisión. – Tom

Cuestiones relacionadas