Primitive Data Types - oracle doc says the range of long
in Java is -9,223,372,036,854,775,808
to 9,223,372,036,854,775,807
. But when I do something like this in my eclipse
long i = 12345678910;
it shows me "The literal 12345678910 of type int is out of range
" error.
There are 2 questions.
1) How do I initialize the long
with the value 12345678910
?
2) Are all numeric literals by default of type int
?
Long
- due to auto-boxing, you can use Long i = 12345678910L
, or use Long i = Long.valueOf(12345678910L)
for those cases where you cannot use auto-boxing.
You should add L: long i = 12345678910L;. Yes.
BTW: it doesn't have to be an upper case L, but lower case is confused with 1
many times :).
You need to add the L character to the end of the number to make Java recognize it as a long. long i = 12345678910L; Yes.
See Primitive Data Types which says "An integer literal is of type long if it ends with the letter L or l; otherwise it is of type int."
You need to add uppercase L
at the end like so
long i = 12345678910L;
Same goes true for float with 3.0f
Which should answer both of your questions
To initialize long you need to append "L" to the end. It can be either uppercase or lowercase.
All the numeric values are by default int
. Even when you do any operation of byte
with any integer, byte
is first promoted to int
and then any operations are performed.
Try this
byte a = 1; // declare a byte
a = a*2; // you will get error here
You get error because 2
is by default int
.
Hence you are trying to multiply byte
with int
. Hence result gets typecasted to int
which can't be assigned back to byte
.
Success story sharing
0x200000000L
0x20000000L
?0x20000000L
would work but can still be represented byint
(a 32-bit integer), thus0x20000000
would work just as well.0x200000000L
breaks that boundary, making the trailingL
necessary.