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?

aamadmi
fuente
¿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 :).

MByD
fuente
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".

Jack Edmonds
fuente
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

Amir Raminfar
fuente
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.

Suraj Dubey
fuente