7
long l2 = 32;

上記のステートメントを使用すると、エラーは発生しませんが (l最後には使用しませんでした)、以下のステートメントを使用すると、次のエラーが発生します。

int 型のリテラル 3244444444 が範囲外です

long l2 = 3244444444;

を使用するlong l2 = 3244444444l;と、エラーは発生しません。

これの理由は何ですか?l の使用は、長い変数では必須ではありません。

4

2 に答える 2

7

3244444444リテラル整数として解釈されますが、32 ビットint変数に収まりません。これはリテラルの long 値である必要があるため、最後にlorが必要です。L

long l2 = 3244444444l; // or 3244444444L

より詳しい情報:

于 2013-07-19T04:45:19.153 に答える
0

int リテラルは、long 変数に代入するときに long に自動拡大されますが、値を表現するときは明示的な long リテラルを使用する必要があることに注意してください。

  1. より大きいInteger.MAX_VALUE (2147483647)

    (また)

  2. 未満Integer.MIN_VALUE (-2147483648):

    long x1 = 12; //OK
    long x2 = 2147483648; // not OK! That's not a valid int literal
    long x3 = 2147483648L; // OK
    
于 2013-07-19T04:47:36.563 に答える