この数値は長い範囲に収まるのに、なぜエラーが発生するのでしょうか:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The literal 8751475143 of type int is out of range
この数値は長い範囲に収まるのに、なぜエラーが発生するのでしょうか:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The literal 8751475143 of type int is out of range
成功する
long n = 8751475143L;
L
長いリテラルにします
デフォルトではint
整数リテラルは、ASCII 文字の L または l (エル) の接尾辞が付いている場合、long 型です。それ以外の場合は int 型です (§4.2.1)。文字 l (エル) は数字の 1 (1) と区別しにくいことが多いため、接尾辞 L が推奨されます。[..]
リテラルを解析するとき、代入のターゲットは考慮されないため、L サフィックスが必要です。
long n = 8751475143L;
ほとんどの場合、いくつかの注目すべき例外がありますが、式の型は、そのコンテキストをあまり参照せずに決定されます。したがって、 JLS のセクション 3.10.1 に従って、整数リテラルは接尾辞orint
がない限り型であり、型の整数リテラルの範囲はもちろんその lf の範囲に制限されます。l
L
int
int
特に指定しない限り、Java のすべての数値はinteger
s として扱われます (または、小数点記号を使用すると、float
s として扱われます)。
だから、あなたが書くなら
long i = 1234;
java は数値1234
を としてinteger
処理し、型キャストをlong
行います。
ただし、次のように入力すると:
long n = 8751475143;
は範囲外のため、Java は8751475143
として扱うことができません。最後に「L」を追加して、integer
意味したことを指定する必要があります。long
long n = 8751475143L;