Java's L number (long) specification

java, long-integer, numbers, short, specifications

Solution

There are specific suffixes for `long` (e.g. `39832L`), `float` (e.g. `2.4f`) and `double` (e.g. `-7.832d`).

If there is no suffix, and it is an integral type (e.g. `5623`), it is assumed to be an `int`. If it is not an integral type (e.g. `3.14159`), it is assumed to be a `double`.

In all other cases (`byte`, `short`, `char`), you need the cast as there is no specific suffix.

The Java spec allows both upper and lower case suffixes, but the upper case version for `long`s is preferred, as the upper case `L` is less easy to confuse with a numeral `1` than the lower case `l`.

See the JLS section 3.10 for the gory details (see the definition of `IntegerTypeSuffix`).

Problem

It appears that when you type in a number in Java, the compiler automatically reads it as an integer, which is why when you type in (long) `6000000000` (not in integer's range) it will complain that `6000000000` is not an integer. To correct this, I had to specify `6000000000L`. I just learned about this specification. Are there other number specifications like for short, byte, float, double? It seems like these would be good to have because (I assume) if you could specify the number you're typing in is a short then java wouldn't have to cast it - that is an assumption, correct me if I'm wrong. I would normally search this question myself, but I don't know what this kind of number specification is even called.

Original source