105

Java で数値を入力すると、コンパイラは自動的にそれを整数として読み取るようです。そのため、(long) 6000000000(整数の範囲ではない) を入力すると6000000000、整数ではないというエラーが表示されます。これを修正するには、指定する必要があり6000000000Lました。この仕様は初めて知りました。

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

4

7 に答える 7

192

long(eg 39832L)、float(eg 2.4f) 、 double( eg)には特定の接尾辞があります-7.832d

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

他のすべての場合(、、byte)ではshortchar特定の接尾辞がないため、キャストが必要です。

Java仕様では、大文字と小文字の両方のサフィックスが許可されていますが、大文字は小文字よりも数字と混同しにくいためlong、sの大文字バージョンが推奨されます。L1l

厄介な詳細については、JLSセクション3.10を参照してください(の定義を参照IntegerTypeSuffix)。

于 2009-04-20T20:45:24.013 に答える
13

少し接線を気にしないでください。ただし、( Ffloatの場合)、D(doubleの場合)、およびL(longの場合)に加えて、および—およびのそれぞれに接尾辞を追加する提案が行われていることを知りたいと思うかもしれません。 。これにより、バイト(または短い)配列にリテラル構文を使用するときにバイトにキャストする必要がなくなります。提案から例を引用する:byteshortYS

主なメリット:提案が採用された場合、プラットフォームが優れているのはなぜですか?

のような雑然としたコード

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

次のように再コーディングできます

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

JoeDarcyはJava7のProjectCoinを監督しており、彼のブログはこれらの提案を追跡する簡単な方法です。

于 2009-04-20T20:45:51.110 に答える
9

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

于 2009-04-20T20:41:45.833 に答える
1

入力している数字が短いと指定できれば、Javaはそれをキャストする必要がないため、これらがあれば良いようです。

リテラルの解析はコンパイル時に行われるため、パフォーマンスに関してはまったく関係ありません。short接尾辞と接尾辞があると便利な唯一の理由byteは、コードがよりコンパクトになるからです。

于 2009-04-21T08:17:27.750 に答える
1

Java には 2 種類のデータ型があります。

  1. プリミティブ データ型
  2. 非プリミティブ データ型

特定のデータ型では、long、float、double などの指定が必要です。

上記のデータ型のいずれかを任意の変数に割り当てる際は、常に次のことを忘れないでください....

  • double データ型では、値の最後に「d」を付けます。
  • long データ型では、値の最後に「L」を付けます。
  • float データ型では、値の最後に「f」を付けます。

例:

長い数字 = 15000000000L;

float mysecondnum = 5.75f;

ダブル mynumber = 19.99d;

より詳しい情報:

  • long データ型のサイズは 8 バイトです。
  • float データ型のサイズは 4 バイトです。
  • double データ型のサイズは 8 バイトです。

long データ型の精度レベルは小数点以下 7 から 8 桁までで、float データ型は小数点以下 15 桁までです。

編集:

この型キャストに加えて、プリミティブ データ型を別の型に変更するために使用できます。

  • ワイドニング キャスティング (自動): 小さいタイプから大きいサイズのタイプへ
  • ナローイングキャスティング(手作業):大型タイプから小型タイプへ
于 2021-05-13T08:24:37.307 に答える
0

intlongリテラルを区別する必要がある理由を理解するには、次の点を考慮してください。

long l = -1 >>> 1;

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

ご想像のとおり、両方のコード フラグメントが variable に同じ値を与えますlintとリテラルの区別がつかないままlong、 の解釈は-1 >>> 1

-1L >>> 1 // ?

また

(int)-1 >>> 1 // ?

そのため、数値が共通の範囲にある場合でも、型を指定する必要があります。デフォルトがリテラルの大きさで変更された場合、数字を変更するだけで式の解釈に奇妙な変化が生じます。

これは では発生しません。これはbyte、算術演算shortcharビット単位の演算を実行する前に常に昇格されるためです。おそらく、配列の初期化式などで使用する整数型の接尾辞である必要がありますが、そうではありません。接尾辞と をfloat使用します。他のリテラルには明確な型があり、 には特別な型があります。fdouble dnull

于 2009-04-20T20:38:37.260 に答える