While writing some code I noticed that long(primitive) data type does not need to have the suffix l or L. My code compiles and run fine with this. Can anyone explain the logic B
Try assigning a really bug number, like long l = 0xFFFFFFFFF;
.
When you initialize a literal like 0xFFFFFFFFF, if there is no suffix and the variable is an integral type(int, long, etc), the value is assumed to be an int
. And, an int
can hold 32 bits, not 36 bits (9 x 0xF
= 9 x '1111'
) like you will be trying if you type long l = 0xFFFFFFFFF;
. So, you have to use a long
that has a capacity of 64 bits. Appending 'L' or 'l' to the end of the value, like 0xFFFFFFFFFL, should take care of the compiler error. [Reference]
In general, since the type conversion to long will happen anyway, it is a good idea to be explicit about that L
.