34

Java で長い値を宣言しようとしていますが、残念ながら機能しません。

これは私のコードです。次のエラー メッセージが表示されます:「型 int のリテラル 4294967296 は範囲外です」。

long bytes = 4294967296;

4294967296 バイト (4GB) を超えるファイルを除外するファイル フィルターを作成するには、この値が必要です。逆long size = file.length()に、すべてのファイル サイズで問題なく ( ) 動作するため、宣言が機能しない理由がわかりません。

4

6 に答える 6

76

L番号の末尾に追加:

long bytes = 4294967296L;
于 2010-02-28T00:12:53.843 に答える
28

質問のタイトルに答えるために、定数を介して long の最大値を取得できます。

Long.MAX_VALUE

問題を解決するには、数字の後にl( L) リテラルを追加します。

于 2010-02-28T01:10:06.847 に答える
19

longリテラルの後には文字Lorが続きlます ( JLS 3.10.1を参照)。大文字の方が読みやすく、小文字の方lが見た目が似ているため優れています1

特定の番号については、おそらく次のように書く方が簡単です。

 long bytes = (1L << 32);

このようにして、コードを読んだ人は、それbytesが正確に 2 の 32 乗であることがすぐにわかります。

于 2010-02-28T00:20:35.663 に答える
18

long bytes = 4294967296L;を使用していることをコンパイラに示すようにしてくださいlong

于 2010-02-28T00:12:46.730 に答える
4

「なぜ」という質問に対する答えは、4294967296 が長くないためです。デフォルトでは、Java は int または double 型のように任意の数値を調べます (ドットがあるかどうかに応じて)。そして、この数値を指定されたタイプに変換します(あなたの場合は長い)。したがって、表示されるエラーは、数値が int の最大値よりも大きいことを意味します。最後にリテラル属性を追加すると、使用するタイプがコンパイラに認識されます (b - バイト、s - ショート、l - ロング、f - フロート)。

于 2013-07-20T05:10:37.170 に答える
2

スフィアンは正しいです。Java でさまざまなタイプの数値のリテラルを宣言する方法を示すドキュメントを次に示します。

http://www.janeg.ca/scjp/lang/literals.html

于 2010-02-28T00:14:52.607 に答える