いくつかのコードを書いている間、私は長い(プリミティブな)データ型に接尾辞lまたはLを付ける必要はないことに気付きました。私のコードはこれをコンパイルしてうまく動作します。誰もが論理を説明することができますか?ありがとうございます。Javaで長い間接尾辞が必要なのはなぜですか?
long l=435; //Complies and Run fine
いくつかのコードを書いている間、私は長い(プリミティブな)データ型に接尾辞lまたはLを付ける必要はないことに気付きました。私のコードはこれをコンパイルしてうまく動作します。誰もが論理を説明することができますか?ありがとうございます。Javaで長い間接尾辞が必要なのはなぜですか?
long l=435; //Complies and Run fine
int型は自動的にlongに変換されるため、
あなたが行うと:あなたが与えられているデータ型はlong
あるので、それは自動変換からlong
データ型をして
long l=435;
コンパイラは、その後、int
として、それを考慮し、。したがって、接尾辞は必要ありません。あなたのような、本当に長い数でそれをしようとした場合
しかし、:
long l = 9999999999;
コンパイラはエラー(整数大きすぎる)をスローします。これは、それをint
とみなそうとしますが、大きすぎてint
にはなりません。したがって、ここには接尾辞が必要です。あなたがする場合:
long l = 9999999999L;
それはコンパイルされます。
long
データ型にしか収まらない数字には接尾辞が必要です。
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
本当に長い番号で試してみてください... – Hackerdarshi