Javaの数値リテラルについて
Oracle Java Silverの黒本をやっていて、「???」と思ったので、ここで解説してみようと思います。
Javaにおける数値リテラルは大きく分けて2つ、
整数型リテラル int 型, long 型
浮動小数点リテラル float型, double型
があります。
このうち、「整数リテラル」に関して、例題を行いながら解説します。
ここで例題を一つ。
Q.次の式のうち、コンパイルエラーとなるものを1つ選びなさい。
1.int a = 267; 2. int b = 0413; 3. int c = 0x10B; 4. int d = 0b100001011; 5. int e = 0827;
ポイントはこれらが「〇進数」であるか判断することです。
覚えておくべきルールは以下。
◆10進数
0~9でなる値。普段私たちが使っている最もわかりやすい数値です。
◆2進数
0と1の2種類でできています。
目印として頭(接頭辞)に「0b」or「0B」が付く
◆8進数
目印として頭に「0」が付く
◆16進数
目印として頭に「0x」or 「0X」が付く
このことから言えるのは、
1.10進数
2.8進数
3.16進数
4.2進数
5.8進数
です。が、「5.」の8進数がおかしいことに気が付きます。
8進数であれば、「0~7」の範囲で収まるはずなのに、「08…」となっています。
なので、コンパイルエラーが出るのは 「5.」です。他の進数であれば、ルールに反します。
Java SE7以降、「数値リテラル」のルールに、アンダースコア「‗」を使った数値表記が追加されました。
アンダースコアを使った数値表記が追加された理由は、
桁数の多い数値リテラルを見やすくするため
日本でいう「¥10,000」というような表記でも「,」部分に「‗」とすることでコードの可読性を向上させる
と、とりあえず見やすくするためにしてくれたようです。
しかし、この数値表記には一定のルールが存在します。
リテラルの先頭と末尾には記述できない
記号の前後には記述できない
このルールに反しなければ、どこにでも「‗」を追記できます。
それを踏まえて例題を一つ。
Q.次の式のうち、コンパイルエラーとなるものを5つ選びなさい。
1.int a = 123_456_789; 2. int b = 5______2; 3. int c = _123_456_789; 4. int d = 123_456_789_; 5. float e = 3_.1415F; 6. long f = 999_999_9999L; 7. byte g = 0b0_1; 8. int h = 0_52; 9. int i = 0x_52;
先に記した通りに、ルールに反しているものを選びます。
3, 4 → リテラルの先頭と末尾には記述できない
2, 5, 9 → 記号の前後には記述できない
となります。
進数や浮動小数点などで使えそうな「0x」「0B」の前後、「F」「L」の前後には使えないこと。8進数の先頭の「0」の後にはOKのようです。
今日は以上となります。ありがとうございました。