Java SE 7で導入されたアンダースコア入り数値リテラルですが、今日ちょっと勉強していて、いろいろあったのでちょっと試してみました。
数値リテラルの途中に「_」が入れられるというものですが、
という例外があります。
実際に問題集(笑)の内容を試してみます。
int i1 = 123_456_789; int i2 = 5_______2; // int i3 = _123_456_789; // コンパイルエラー(リテラルの先頭と末尾には記述できない) // int i4 = 123_456_789_; // コンパイルエラー(リテラルの先頭と末尾には記述できない) // float f1 = 3_.1415F; // コンパイルエラー(記号の前後には記述できない) 小数点(.)の前 // long l1 = 999_99_9999_L; // コンパイルエラー(記号の前後には記述できない) Lの前 byte b1 = 0b0_1; int i5 = 0_52; // int i6 = 0x_52; // コンパイルエラー(記号の前後には記述できない) xの後
ここにさらにバイナリリテラルが混じると、もっと話がややこしくなるみたいです…。
// int i1 = 0b_1001; // コンパイルエラー(記号の前後には記述できない) bの後 long l1 = 0b100_01L; float f1 = 0b10_01; // float f2 = 0b10_01F; // コンパイルエラー(バイナリリテラルはFと一緒には使えない) double d1 = 0b10_01; // double d2 = 0b10_01D; // コンパイルエラー(バイナリリテラルはDと一緒には使えない)
バイナリリテラルでfloatやdoubleは書けるものの、「F」と「D」は一緒に使えないらしいです。まあ、2進表記ですからね…。
というか、こんな書き方、普通やらない。たぶんやらない。