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のようです。

 

今日は以上となります。ありがとうございました。

おすすめ: