views:

543

answers:

5

I'm trying to declare a long value in Java, which unfortunately does not work.

This is my code. It results in the following error message: "The literal 4294967296 of type int is out of range".

long bytes = 4294967296;

I need this value to make a file filter that filters out files that are bigger than 4294967296 bytes (4GB). The other way round works without any issues (long size = file.length()) with every file size, which is why I can't figure out why my declaration is not working.

+5  A: 

try long bytes = 4294967296L; to indicate to the compiler that you are using a long.

Soufiane Hassou
Thank you very much Soufiane! Always astonishing how quick you guys are! :)
Peter
You're welcome. Just don't forget to accept an answer. :-)
Soufiane Hassou
+8  A: 

Add L to the end of the number:

long bytes = 4294967296L;
icktoofay
Thank you too. Appreciate it!
Peter
+1  A: 

Soufiane is correct. Here is a doc that shows how to declare literals of the various types of numbers in Java:

http://www.janeg.ca/scjp/lang/literals.html

Dougman
Great link! Many thanks!
Peter
+4  A: 

long literals are followed by the letter L or l (see: JLS 3.10.1). Uppercase is better because it's more legible, lowercase l looks too similar to 1.

For your particular number, it's probably easier to write:

 long bytes = (1L << 32);

This way, someone who reads the code can quickly tell that bytes is exactly 2 to the power of 32.

polygenelubricants
+1  A: 

To answer your question title, the maximum value of a long can be obtained via the constant:

Long.MAX_VALUE

To solve your problem - add the l (L) literal after the number.

Bozho