Javaでlongを初期化する


213

プリミティブデータ型-オラクルのドキュメントは、の範囲言うlongJavaではある-9,223,372,036,854,775,8089,223,372,036,854,775,807。しかし、私が日食でこのようなことをすると

long i = 12345678910;

The literal 12345678910 of type int is out of range」エラーが表示されます。

2つの質問があります。

1)をlong値で初期化するにはどうすればよい12345678910ですか?

2)すべての数値リテラルはデフォルトでタイプintですか?


そして、Longを初期化するのはどうですか?
Wolfgang Fahl

1
@WolfgangFahl同じルールLong-自動ボクシングにより、を使用できますLong i = 12345678910L。または、Long i = Long.valueOf(12345678910L)自動ボクシングを使用できない場合に使用できます。
ドリアングレイ

回答:


422
  1. 追加する必要がありLますlong i = 12345678910L;
  2. はい。

ところで、大文字のLである必要はありませんが、小文字は1何度も混同されます:)。


3
念のために誰かが思っていた:同じヘクスのために行く、など0x200000000L
user149408

@Victor Long.valueOf(long)はプリミティブlongではなくLongを返します。MByDのソリューションは、自動ボクシングに依存することを避けています。
gouessej 2017年

@ user149408もしかして0x20000000L
プルート

2
@Pluto 0x20000000Lは機能しますが、それでもint(32ビット整数)で表すことができるため0x20000000、同様に機能します。0x200000000Lその境界を破り、末尾がL必要になります。
user149408

58
  1. LJavaでそれをlongとして認識させるには、数字の末尾に文字を追加する必要があります。

    long i = 12345678910L;
  2. はい。

「整数リテラルは、文字Lまたはlで終わる場合はlong型であり、それ以外はint 型である」と述べているプリミティブデータ型を参照してください。


39

Lそのように最後に大文字を追加する必要があります

long i = 12345678910L;

同じことがフロートにも当てはまります 3.0f

あなたの両方の質問に答えるべきです


15

longを初期化するには、末尾に「L」を追加する必要があります。
大文字でも小文字でもかまいません。

すべての数値はデフォルトでですintbyte任意の整数を使用して演算を実行した場合でも、byte最初にに昇格しint、次に任意の演算が実行されます。

これを試して

byte a = 1; // declare a byte
a = a*2; //  you will get error here

2デフォルトではであるため、エラーが発生しますint
したがって、で乗算しようとしてbyteintます。したがって、結果は型キャストさintれ、に割り当て直すことはできませんbyte

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.