AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
リテラル(数値リテラルのアンダースコア区切り)難易度 高無料

次のコードのコンパイル結果として正しいものを選べ。

1  public class Q12 {
2      public static void main(String[] args) {
3          int a = 1_000_000;
4          double d = 3_14.159;
5          long L1 = 9_999_999_999L;
6          float f = 10_00_.5f;
7          System.out.println(a);
8      }
9  }
  1. Aコンパイルエラー(6行目・アンダースコアが小数点の直前にある)
  2. Bコンパイルエラー(4行目・小数部の途中にアンダースコアは置けない)
  3. Cコンパイルエラー(5行目・L サフィックスの直前にアンダースコアは置けない)
  4. Dすべての行が正しくコンパイルできる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

数値リテラルには可読性のためにアンダースコア(_)を桁区切りとして挿入できるが、挿入できる位置には制約がある。 禁止位置は「リテラルの先頭・末尾」「小数点(.)の直前直後」「Lfd などの型サフィックスの直前」「基数プレフィックス(0x0b)の直後」。それ以外の数字と数字の間であれば自由に置ける。

  • 3行目 1_000_000:数字同士の間のみ。適格。
  • 4行目 3_14.159:アンダースコアは 314 の間(数字同士)にあり、小数点には接していない。適格。
  • 5行目 9_999_999_999L:どのアンダースコアも数字同士の間で、L サフィックスの直前は数字(9)。適格。
  • 6行目 10_00_.5f:末尾のアンダースコア _小数点 . の直前に置かれている。これは禁止位置でありコンパイルエラーになる。

6行目のみが不正であり、そこでコンパイルが失敗する。

各誤答が違う理由
  • B4行目のアンダースコアは 314 という数字同士の間にあり、小数点には接していない。禁止位置に該当せず適格。
  • C5行目の L の直前は数字 9 であり、アンダースコアではない。サフィックス直前にアンダースコアがあるわけではないため適格。
  • D6行目 10_00_.5f は末尾のアンダースコアが小数点の直前に位置しており、この配置は禁止されているためコンパイルエラーになる。
ひっかけ: 「アンダースコアは数字が並ぶところならどこでも良い」という思い込みが罠。小数点・型サフィックス・基数プレフィックスに隣接する位置だけは禁止されている。5行目の L の直前は数字なので合法だが、6行目は小数点の直前にアンダースコアがあるため不合法、という違いを見抜く必要がある。
コマンド例と想定される挙動(未実行)
javac でコンパイル:
Q12.java:6: error: illegal underscore
        float f = 10_00_.5f;
                        ^
→ コンパイル不成立(実行に至らない)。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
データ型 を含む問題を分野別に演習できます。
演習する →