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 6000000000no 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.

1conly0conO(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.77que_loeso suceda, se convertirá en flotador aunque se declaró como largo30es unintque 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)ly1(0yOresp.) 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 parabyteyshort-YySrespectivamente . 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
0bprefijo 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
shortybytesería bueno es que conduce a un código más compacto.fuente
Para entender por qué es necesario distinguir entre literales
intylong, considere:versus
Ahora, como era de esperar, ambos fragmentos de código dan el mismo valor a la variable
l. Sin poder distinguirintylongliterales, ¿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,shortycharporque 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.floatusa sufijofydoubled. Otros literales tienen tipos inequívocos, con un tipo especial paranull.fuente
Integer.MAX_VALUE, sin embargo, si no hubiera forma de distinguir entre literalesintylong, sería ambiguo. / No recuerdo esta pregunta, pero de todos modos he aclarado mi respuesta.