Javaで数値を入力すると、コンパイラは自動的に整数として読み取ります。このため、(長い)6000000000
(整数の範囲ではない)を入力すると、6000000000
は整数ではありません。これを修正するには、6000000000L
を指定する必要がありました。この仕様について知りました。
Short、byte、float、doubleなどの他の数値指定はありますか?入力している番号を短く指定できれば、Javaはキャストする必要がないので、これらは正しいと思われます。私が間違っていたら私は通常、この質問を自分で検索しますが、この種の数値仕様が何と呼ばれているのかわかりません。
long
には特定のサフィックスがあります(例:39832L
)、float
(例:2.4f
)およびdouble
(例:-7.832d
)。
接尾辞がなく、整数型である場合(例:5623
)、int
と見なされます。整数型でない場合(例:3.14159
)、double
と見なされます。
他のすべての場合(byte
、short
、char
)では、特定のサフィックスがないためキャストが必要です。
Java仕様では大文字と小文字の両方の接尾辞を使用できますが、大文字のlong
は混乱しにくいため、L
sの大文字バージョンが推奨されます数字1
小文字のl
より。
詳細な情報については JLSセクション3.1 をご覧ください(IntegerTypeSuffix
の定義をご覧ください)。
少しの接線を気にしないことを願っていますが、F
(フロートの場合)、D
(ダブルの場合)、およびL
以外にも興味があるかもしれません。 (長い間)、 提案が行われましたbyte
とshort
—Y
とS
にそれぞれ接尾辞を追加します。これにより、バイト(または短い)配列にリテラル構文を使用するときに、バイトにキャストする必要がなくなります。提案から例を引用する:
主な利点:提案が採用された場合、なぜプラットフォームが優れているのですか?
のような汚いコード
byte[] stuff = { 0x00, 0x7F, (byte)0x80, (byte)0xFF};
として再コーディングすることができます
byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy };
Joe DarcyはJava 7のProject Coinを監督しており、 his blog はこれらの提案を追跡する簡単な方法です。
デフォルトでは、整数プリミティブデータ型(byte、short、int、long)は、Javaによってint型として扱われます。 =コンパイラ。byteおよびshortの場合、値が割り当てられている限りbyteおよびshortが範囲を超えているため、明示的な型キャストが必要です。
例:
byte b = 130; // CE: range is exceeding.
これを克服するには、型キャストを実行します。
byte b = (byte)130; //valid, but chances of losing data is there.
Longデータ型の場合、手間をかけずに整数値を受け入れることができます。のように割り当てるとします
Long l = 2147483647; //which is max value of int
この場合、L/lのようなサフィックスは必要ありません。デフォルトでは、値2147483647はJavaコンパイラはint型です。内部型のキャストはコンパイラによって行われ、intはLong型に自動昇格されます。
Long l = 2147483648; //CE: value is treated as int but out of range
ここでは、Javaコンパイラーによってリテラル2147483648をlong型として扱うために、接尾部をLとして置く必要があります。
だからついに
Long l = 2147483648L;// works fine.
これらはリテラルであり、Java言語仕様の section 3.1 で説明されています。
入力している数字を短く指定できれば、Javaはキャストする必要がないので、これらは良いと思われます。
リテラルの解析はコンパイル時に発生するため、これはパフォーマンスに関してまったく無関係です。 short
およびbyte
接尾辞を持つ唯一の理由は、コードがよりコンパクトになるためです。
考慮してください:
long l = -1 >>> 1;
versus
int a = -1;
long l = a >>> 1;
これで、わずらわしいコードフラグメントが変数l
に同じ値を与えると期待できます。したがって、int
リテラルの式はint
sとして実行する必要があります。