Reputation: 40318
long l2 = 32;
When I use the above statement, I don't get an error (I did not used l
at the end), but when I use the below statement, I get this error:
The literal 3244444444 of type int is out of range
long l2 = 3244444444;
If I use long l2 = 3244444444l;
, then there's no error.
What is the reason for this? Using l is not mandatory for long variables.
Upvotes: 8
Views: 9917
Reputation: 2006
Note that while int literals will be auto-widened to long when assigning to a long variable, you will need to use an explicit long literal when expressing a value that is
greater than Integer.MAX_VALUE (2147483647)
(or)
less than Integer.MIN_VALUE (-2147483648)
:
long x1 = 12; //OK
long x2 = 2147483648; // not OK! That's not a valid int literal
long x3 = 2147483648L; // OK
Upvotes: 0
Reputation: 85779
3244444444
is interpreted as a literal integer but can't fit in a 32-bit int
variable. It needs to be a literal long value, so it needs an l
or L
at the end:
long l2 = 3244444444l; // or 3244444444L
More info:
Upvotes: 8