Java - Error on: long n = 8751475143;

2019-03-06 12:06发布

问题:

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 

回答1:

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). [..]



回答2:

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.



回答3:

All numbers in java are treated as integers, unless you say otherwise (or you use a decimal separator - then they are treated as a floats).

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;