Inicializar un largo en Java


214

Primitiva Tipos de datos - Oracle doc dice que la gama de longen Java es -9,223,372,036,854,775,808a 9,223,372,036,854,775,807. Pero cuando hago algo así en mi eclipse

long i = 12345678910;

me muestra " The literal 12345678910 of type int is out of range" un error.

Hay 2 preguntas

1) ¿Cómo inicializo el longcon el valor 12345678910?

2) ¿Son todos los literales numéricos por defecto de tipo int?


¿Y qué hay de inicializar un Long?
Wolfgang Fahl el

1
@WolfgangFahl Las mismas reglas para Long: debido al auto-boxeo, puede usar Long i = 12345678910L, o usar Long i = Long.valueOf(12345678910L)para aquellos casos en los que no puede usar el auto-boxeo.
Dorian Gray

Respuestas:


423
  1. Usted debe agregar L: long i = 12345678910L;.
  2. Si.

Por cierto: no tiene que ser una L mayúscula, pero la minúscula se confunde con 1muchas veces :).


3
Por si alguien se preguntaba: lo mismo ocurre con el hexadecimal, por ejemplo0x200000000L
usuario149408

@Victor Long.valueOf (long) devuelve un Long, no un primitivo long. La solución de MByD evita depender del auto-boxeo.
gouessej

@ user149408 ¿Quizás quieres decir 0x20000000L?
Plutón

2
@Pluto 0x20000000Lfuncionaría pero aún puede representarse con int(un entero de 32 bits), por lo 0x20000000que funcionaría igual de bien. 0x200000000Lrompe ese límite, haciendo Lnecesario el arrastre .
usuario149408

59
  1. Debe agregar el Lcarácter al final del número para que Java lo reconozca como largo.

    long i = 12345678910L;
  2. Si.

Ver tipos de datos primitivos que dice "Un literal entero es de tipo largo si termina con la letra L o l; de lo contrario, es de tipo int".


39

Necesitas agregar mayúsculas Lal final así

long i = 12345678910L;

Lo mismo ocurre para flotar con 3.0f

Que debería responder a ambas preguntas


15

Para inicializar mucho, debe agregar "L" al final.
Puede ser mayúscula o minúscula.

Todos los valores numéricos son por defecto int. Incluso cuando realiza cualquier operación bytecon cualquier número entero, byteprimero se promueve inty luego se realiza cualquier operación.

Prueba esto

byte a = 1; // declare a byte
a = a*2; //  you will get error here

Obtiene un error porque 2es por defecto int.
Por lo tanto, estás tratando de multiplicar bytecon int. Por lo tanto, el resultado se teclea a lo intque no se puede asignar de nuevo byte.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.