long l2 = 32;
上記のステートメントを使用すると、エラーは発生しませんが (l
最後には使用しませんでした)、以下のステートメントを使用すると、次のエラーが発生します。
int 型のリテラル 3244444444 が範囲外です
long l2 = 3244444444;
を使用するlong l2 = 3244444444l;
と、エラーは発生しません。
これの理由は何ですか?l の使用は、長い変数では必須ではありません。
long l2 = 32;
上記のステートメントを使用すると、エラーは発生しませんが (l
最後には使用しませんでした)、以下のステートメントを使用すると、次のエラーが発生します。
int 型のリテラル 3244444444 が範囲外です
long l2 = 3244444444;
を使用するlong l2 = 3244444444l;
と、エラーは発生しません。
これの理由は何ですか?l の使用は、長い変数では必須ではありません。
3244444444
リテラル整数として解釈されますが、32 ビットint
変数に収まりません。これはリテラルの long 値である必要があるため、最後にl
orが必要です。L
long l2 = 3244444444l; // or 3244444444L
より詳しい情報:
int リテラルは、long 変数に代入するときに long に自動拡大されますが、値を表現するときは明示的な long リテラルを使用する必要があることに注意してください。
より大きいInteger.MAX_VALUE (2147483647)
(また)
未満Integer.MIN_VALUE (-2147483648)
:
long x1 = 12; //OK
long x2 = 2147483648; // not OK! That's not a valid int literal
long x3 = 2147483648L; // OK