2010-02-28 16 views
34

Estoy tratando de declarar un valor largo en Java, que desafortunadamente no funciona.¿Por qué no puedo asignar un valor "largo" de 4 mil millones?

Este es mi código. Resulta en el siguiente mensaje de error: "El literal 4294967296 de tipo int está fuera de rango".

long bytes = 4294967296; 

necesito este valor para hacer un filtro de archivos que filtra los archivos que son más grandes que 4294967296 bytes (4 GB). A la inversa, funciona sin problemas (long size = file.length()) con cada tamaño de archivo, por lo que no puedo entender por qué mi declaración no funciona.

Respuesta

18

intente long bytes = 4294967296L; para indicar al compilador que está utilizando un long.

+0

Muchas gracias Soufiane! Siempre sorprendente lo rápido que son chicos! :) – Peter

+6

De nada. Solo no olvides aceptar una respuesta. :-) –

74

Añadir L hasta el final de la serie:

long bytes = 4294967296L; 
+0

Gracias también. ¡Lo aprecio! – Peter

+10

@Peter - debe "aceptar" esta respuesta. – bacar

19

long literales son seguidos por la letra L o l (ver: JLS 3.10.1). La mayúscula es mejor porque es más legible, l minúscula se ve muy similar a 1.

Para su número en particular, es probablemente más fácil de escribir:

long bytes = (1L << 32); 

De esta manera, una persona que lee el código puede decir rápidamente que bytes es exactamente 2 a la potencia de 32.

+0

Bien, porque eso es lo primero que todos piensan cuando ven 1L << 32 - oh hola, eso es 2^32 ... rofl. –

28

Para responder el título de la pregunta, el valor máximo de una larga puede ser obtenida a través de la constante:

Long.MAX_VALUE 

Para resolver su problema - añadir el l (L) literal después del número.

4

La respuesta a su pregunta "por qué" se debe a 4294967296 no es larga. Por defecto, java busca en cualquier número como int o double type (dependiendo de si tiene o no tiene punto). Y solo luego convierta este número al tipo especificado (largo en su caso). Entonces, el error que ves significa que tu número es más grande que el valor máximo fot int. Al agregar un atributo literal al final, el compilador sabe qué tipo usar (b - bytes, s - corto, l - largo, f - flotante)

Cuestiones relacionadas