質問

Java で数値を入力すると、コンパイラは自動的にそれを整数として読み取るようです。そのため、(long) を入力すると、 6000000000 (整数の範囲外です)次のように不平を言います 6000000000 は整数ではありません。これを修正するには、次のように指定する必要がありました 6000000000L. 。この仕様については最近知りました。

short、byte、float、doubleなどの他の数値指定はありますか?入力している数値が短いと指定できれば、Java はそれをキャストする必要がなくなるため (私が推測している)、これらはあったほうが良いようです。これは仮定です。間違っていたら訂正してください。 。通常、この質問を自分で検索するのですが、この種の数値指定が何と呼ばれるかさえ知りません。

役に立ちましたか?

解決

longに特異的な接尾辞(例えば39832L)、float(例えば2.4f)とdouble(例えば-7.832d)があります。

がない接尾辞ではない、そしてそれが整数型である場合(例えば5623)、intであると仮定されます。それは整数型(例えば3.14159)でない場合、doubleと見なされます。

具体的な接尾辞がないとして

他のすべてのケース(byteshortchar)では、あなたは、キャストを必要としています。

のJava仕様は、上下両方のケースサフィックスを可能にするが、上ケースlongは小文字Lより数字1と混同しにくくなるようlsための大文字バージョンが、好ましい。

を参照してください。 JLSセクション3.10 血みどろの詳細は(IntegerTypeSuffixの定義を参照)。

他のヒント

多少の余談は気にしないでいただければ幸いですが、それ以外にも知りたいことがあると思います F (フロートの場合)、 D (ダブルの場合)、および L (長い間)、 提案がなされました 接尾辞を追加するには byte そして shortY そして S それぞれ。これにより、バイト (または短い) 配列にリテラル構文を使用するときにバイトにキャストする必要がなくなります。提案書の例を引用すると、次のようになります。

主な利点:提案が採用されている場合、なぜプラットフォームが良いのですか?

みたいな汚いコード

 byte[] stuff = { 0x00, 0x7F, (byte)0x80,  (byte)0xFF};

次のように再コード化できます

 byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy };

Joe Darcy は Java 7 用の Project Coin を監督しており、 彼のブログ これらの提案を追跡する簡単な方法があります。

これらはリテラルであり、次で説明されています。 セクション3.10 Java 言語仕様の。

デフォルトでは任意の整数プリミティブデータ型(バイト、ショート、int型、長い)は、Javaコンパイラによって、のint型の型として扱われます。 のバイト短いのために、限り、それらに割り当てられた値がその範囲内にあるように、問題と接尾辞なし必要なしにはありません。値がに割り当てられている場合、のバイト短いのは、彼らの範囲を超えて、明示的な型キャストが必要とされます。

例:

byte b = 130; // CE: range is exceeding.

これは型キャストを行う克服する。

byte b = (byte)130; //valid, but chances of losing data is there.

長いデータ・タイプの場合には、任意の手間をかけずに整数値を受け入れることができます。我々は次のように割り当てるとします。

Long l = 2147483647; //which is max value of int

この場合にはL / Lのような接尾辞が必要とされません。 Javaコンパイラによって考えられているデフォルト値2147483647によってint型です。内蔵型キャストがコンパイラとint型で行われているが、自動ロングタイプにプロモートされます。

Long l = 2147483648; //CE: value is treated as int but out of range 

ここでは、Javaコンパイラによってリテラル2147483648としてlong型を治療するためのLと接尾辞を配置する必要があります。

ので、最後に

Long l = 2147483648L;// works fine.
  

これらのに良いでしょうように思えます   持っているあなたができれば(私は仮定)ので、   あなたが入力している数が指定   短いその後、Javaはしていません   それをキャスト

リテラルの解析は、コンパイル時に起こるので、

、これは、性能に関しては全く無関係です。いいだろうshortbyte接尾辞を持つ唯一の理由は、それがよりコンパクトなコードにつながるということです。

考えてみます:

long l = -1 >>> 1;

int a = -1;
long l = a >>> 1;

これは、変数lに同じ値を与えるために、コードの断片を気に期待したいです。だから我々はintリテラルの表現がintsとして実行する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top