Parece que cuando escribe un número en Java, el compilador lo lee automáticamente como un número entero, por lo que cuando escribe (largo) 6000000000
(no en el rango de números enteros) se quejará de que 6000000000
no es un número entero. Para corregir esto, tuve que especificar 6000000000L
. Acabo de enterarme de esta especificación.
¿Hay otras especificaciones numéricas como short, byte, float, double? Parece que sería bueno tener estos porque (supongo) si pudiera especificar que el número que está escribiendo es corto, entonces Java no tendría que enviarlo; eso es una suposición, corríjame si me equivoco . Normalmente buscaría esta pregunta yo mismo, pero no sé cómo se llama este tipo de especificación numérica.
1
conl
y0
conO
(y así sucesivamente), tu prioridad es configurar correctamente la fuente (si puedes ), luego preocúpese de no perder la tecla Shift.long _lo = 30;
y no,30L
¿esto significa que mi variable se convertirá en flotante ? O, en caso de_lo = _lo + 2.77
que_lo
eso suceda, se convertirá en flotador aunque se declaró como largo30
es unint
que se convierte automáticamente a través de una conversión de ampliación a unlong
. En el segundo caso, su declaración es ilegal. Tendría que lanzar explícitamente el lado derecho a largo, por ejemplo_lo = (long) (_lo + 2.77)
l
y1
(0
yO
resp.) Son bastante similares.Espero que no le importe una ligera tangente, pero creo que le puede interesar saber que además de
F
(para flotante),D
(para doble) yL
(para largo), se ha hecho una propuesta para agregar sufijos parabyte
yshort
-Y
yS
respectivamente . Esto eliminaría la necesidad de convertir a bytes cuando se usa sintaxis literal para matrices de bytes (o cortas). Citando el ejemplo de la propuesta:Joe Darcy está supervisando Project Coin para Java 7, y su blog ha sido una manera fácil de rastrear estas propuestas.
fuente
0b
prefijo para literales binarios. Alarido.Por defecto, cualquier tipo de datos primitivos integrales (byte, short, int, long) será tratado como tipo int por el compilador java. Para byte y short , siempre que el valor asignado a ellos esté en su rango, no hay problema y no se requiere sufijo. Si el valor asignado a byte y short excede su rango, se requiere una conversión de tipo explícita.
Ex:
para superar este tipo de casting realizar.
En el caso de un tipo de datos largo, puede aceptar el valor entero sin problemas. Supongamos que asignamos como
en este caso no se requiere ningún sufijo como L / l. Por defecto, el compilador Java considera que el valor 2147483647 es de tipo int. La conversión de tipos internos la realiza el compilador e int se promueve automáticamente a tipo Long.
Aquí tenemos que poner el sufijo como L para tratar el literal 2147483648 como tipo largo por el compilador java.
así que finalmente
fuente
Estos son literales y se describen en la sección 3.10 de la especificación del lenguaje Java.
fuente
Dado que el análisis de literales ocurre en tiempo de compilación, esto es absolutamente irrelevante con respecto al rendimiento. La única razón por la que tener sufijos
short
ybyte
sería bueno es que conduce a un código más compacto.fuente
Para entender por qué es necesario distinguir entre literales
int
ylong
, considere:versus
Ahora, como era de esperar, ambos fragmentos de código dan el mismo valor a la variable
l
. Sin poder distinguirint
ylong
literales, ¿cuál es la interpretación de-1 >>> 1
?o
Entonces, incluso si el número está en el rango común, necesitamos especificar el tipo. Si el valor predeterminado cambia con la magnitud del literal, entonces habría un cambio extraño en las interpretaciones de las expresiones simplemente por cambiar los dígitos.
Esto no se produce para
byte
,short
ychar
porque siempre son promovidos antes de realizar operaciones aritméticas y bit a bit. Podría decirse que deberían ser sufijos de tipo entero para su uso en, por ejemplo, expresiones de inicialización de matrices, pero no los hay.float
usa sufijof
ydouble
d
. Otros literales tienen tipos inequívocos, con un tipo especial paranull
.fuente
Integer.MAX_VALUE
, sin embargo, si no hubiera forma de distinguir entre literalesint
ylong
, sería ambiguo. / No recuerdo esta pregunta, pero de todos modos he aclarado mi respuesta.