This number falls into the long range, so why do I get the error:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The literal 8751475143 of type int is out of range
This number falls into the long range, so why do I get the error:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The literal 8751475143 of type int is out of range
Make it
long n = 8751475143L;
L
will make it long literal
by default its int
An integer literal is of type long if it is suffixed with an ASCII letter L or l (ell); otherwise it is of type int (§4.2.1). The suffix L is preferred, because the letter l (ell) is often hard to distinguish from the digit 1 (one). [..]
The target of the assignment isn't taken into account when parsing the literal - so you need the L suffix:
long n = 8751475143L;
For the most part - and there are a few notable exceptions - the type of an expression is determined without much reference to its context. So as per section 3.10.1 of the JLS, an integer literal is of type int
unless it has an l
or L
suffix, and the range of an integer literal of type int
is of course limited to the range of int
itslf.
All numbers in java are treated as integer
s, unless you say otherwise (or you use a decimal separator - then they are treated as a float
s).
So, if you write
long i = 1234;
java will tread the number 1234
as integer
, and do the type-cast to long
for you.
However, if you type:
long n = 8751475143;
Java cannot treat 8751475143
as integer
, because it's out of range. You need to specify, that what you meant was long
, by adding 'L' at the end:
long n = 8751475143L;