问题
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.
回答1:
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:
- Primitive Data Types, specifically Default Values and Literals sections.
回答2:
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
来源:https://stackoverflow.com/questions/17738232/using-the-letter-l-in-long-variable-declaration