Javaで長い値を宣言しようとしていますが、残念ながら機能しません。
これは私のコードです。次のエラーメッセージが表示されます。「int型のリテラル4294967296は範囲外です」。
_long bytes = 4294967296;
_
4294967296バイト(4GB)よりも大きいファイルを除外するファイルフィルターを作成するには、この値が必要です。他の方法は問題なく動作します(long size = file.length()
)。すべてのファイルサイズで、宣言が機能しない理由がわかりません。
L
を数字の末尾に追加します。
long bytes = 4294967296L;
質問のタイトルに回答するには、定数を介してlongの最大値を取得できます。
Long.MAX_VALUE
問題を解決するには、番号の後にl
(L
)リテラルを追加します。
long
リテラルの後には、文字L
またはl
が続きます( JLS 3.10.1 を参照)。大文字の方が読みやすいため、小文字のl
は1
に似すぎます。
特定の番号については、おそらく次のように書く方が簡単です。
long bytes = (1L << 32);
このようにして、コードを読んだ人は、bytes
がちょうど2の32乗であることをすぐに知ることができます。
試してくださいlong bytes = 4294967296L;
は、long
を使用していることをコンパイラーに示します。
「なぜ」という質問に対する答えは、4294967296によるものです。デフォルトでは、Java intまたはdouble型(ドットの有無に応じて)として任意の数値を調べます。その後、この数値を指定した型に変換します(長い場合))したがって、表示されるエラーは、数値が最大値fot intよりも大きいことを意味します。末尾にリテラル属性を追加すると、compillerに使用するタイプ(b-バイト、s-ショート、l-ロング、f-フロート)が通知されます
ソフィアンは正しいです。 Javaでさまざまなタイプの数値のリテラルを宣言する方法を示すドキュメントを次に示します。