2016-04-02 10 views
1

いくつかのコードを書いている間、私は長い(プリミティブな)データ型に接尾辞lまたはLを付ける必要はないことに気付きました。私のコードはこれをコンパイルしてうまく動作します。誰もが論理を説明することができますか?ありがとうございます。Javaで長い間接尾辞が必要なのはなぜですか?

long l=435; //Complies and Run fine 
+0

本当に長い番号で試してみてください... – Hackerdarshi

答えて

2

int型は自動的にlongに変換されるため、

2

あなたが行うと:あなたが与えられているデータ型はlongあるので、それは自動変換からlongデータ型をして

long l=435; 

コンパイラは、その後、intとして、それを考慮し、。したがって、接尾辞は必要ありません。あなたのような、本当に長い数でそれをしようとした場合

しかし、:

long l = 9999999999; 

コンパイラはエラー(整数大きすぎる)をスローします。これは、それをintとみなそうとしますが、大きすぎてintにはなりません。したがって、ここには接尾辞が必要です。あなたがする場合:

long l = 9999999999L; 

それはコンパイルされます。
longデータ型にしか収まらない数字には接尾辞が必要です。

0

long l = 0xFFFFFFFFF;のような実際のバグ番号を割り当ててみてください。

0xFFFFFFFFFなどのリテラルを初期化すると、接尾辞がなく、変数が整数型(int、longなど)の場合、値はintと見なされます。 long l = 0xFFFFFFFFF;と入力すると、intは32ビットを保持できますが、36ビット(9 x 0xF = 9 x '1111')では使用できません。したがって、64ビットの容量を持つlongを使用する必要があります。 0xFFFFFFFFFLのように、値の最後に 'L'または 'l'を付けると、コンパイラのエラーが処理されるはずです。 [Reference]

一般的に、long型への変換はとにかく起こるため、そのことについては明示することをお勧めします。L

関連する問題