2011-07-26 22 views
154

Primitive Data Types - oracle doc dice que la gama de long en Java es -9,223,372,036,854,775,808-9,223,372,036,854,775,807. Pero cuando hago algo como esto en mi EclipseInicializar mucho en Java

long i = 12345678910; 

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

Hay 2 preguntas.

1) ¿Cómo inicializar el long con el valor 12345678910?

2) ¿Todos los literales numéricos son por defecto de tipo int?

Respuesta

318
  1. Debe agregar L: long i = 12345678910L;.
  2. Sí.

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

+4

Long.valueOf (12345678910) debería funcionar. – Victor

+0

En caso de que alguien se esté preguntando: lo mismo ocurre con el hexadecimal, p. Ej. '0x200000000L' – user149408

+0

@Victor Long.valueOf (long) devuelve long, no primitive long. La solución de MByD evita confiar en el auto-boxeo. – gouessej

35

es necesario agregar mayúsculas L al final como tal

long i = 12345678910L; 

mismo ocurre cierto para flotador con 3.0f

Cuál debe responder tanto a sus preguntas

+0

21 segundos tarde de las respuestas aceptadas – Prabs

50
  1. Es necesario agregue el carácter L al final del número para hacer que Java lo reconozca como un largo.

    long i = 12345678910L; 
    
  2. Sí.

Ver Primitive Data Types que dice "Un entero literal es de tipo long si termina con la letra L o l; de lo contrario es de tipo int."

12

Para inicializar largo necesitas 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 de byte con cualquier número entero, byte se promociona primero a int y luego se realiza cualquier operación.

probar este

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

obtiene el error debido 2 es por defecto int.
Por lo tanto, intenta multiplicar byte con int. Por lo tanto, el resultado se convierte en int que no se puede asignar de nuevo a byte.

Cuestiones relacionadas