Java入門|数値リテラル

数字の書き方がわかると、Javaコードはもっと読みやすくなる。数値リテラルの基本をやさしく身につけよう

Javaでは、文字や文字列だけでなく、数値そのものをコードの中に直接書くことができます。たとえば、1 や 100 のような整数、3.14 や 5.0 のような小数は、どれもプログラムの中で大切な値として扱われます。こうした 数値そのものを表す書き方 を 数値リテラル といいます。

数値リテラルは、これから先のJava学習でも何度も登場します。計算をするとき、条件を比べるとき、回数を数えるとき、配列の位置を指定するときなど、数値はとても多くの場面で使われます。そのため、早い段階で 数値はどのように書くのか をしっかり理解しておくことは、とても大切です。

また、Javaでは数値の表し方が1つだけではありません。ふだん私たちが使っている10進数だけでなく、8進数や16進数でも整数を表せます。最初は少し不思議に感じるかもしれませんが、こうした表記を知ることで、Javaが数値をどう扱っているのかが少しずつ見えてきます。

ここでは、数値リテラルとは何か、整数リテラルと浮動小数点数リテラルの違い、10進数以外の表記方法、そして 2進数・8進数・16進数の考え方まで、やさしく丁寧に見ていきましょう。

数値リテラルとは何か

数値リテラルとは、Javaのコードの中に直接書かれた数値のことです。

たとえば、次のようなものが数値リテラルです。

1
3
100
2.1
3.14
5.0

これらは、数値そのものを表しています。文字列のように " " で囲んだり、文字のように ' ' で囲んだりはしません。そのまま数字を書いて表すのが基本です。

ここで大切なのは、Javaでは 数値として書かれているのか、文字列として書かれているのか をしっかり区別していることです。たとえば、100 と "100" は見た目は似ていますが、Javaでは別物です。

書き方Javaでの扱い
100数値リテラル
"100"文字列リテラル
'1'文字リテラル

この違いは、今後の計算や比較でもとても大切になります。

数値には大きく2種類ある

Javaで扱う数値リテラルには、大きく分けて2つの種類があります。

  • 整数リテラル
  • 浮動小数点数リテラル

まずは、それぞれの特徴を見てみましょう。

整数リテラル

整数リテラルは、小数点を含まない数値です。

たとえば、次のようなものです。

1
3
100
2025

これらはすべて、整数を表しています。

浮動小数点数リテラル

浮動小数点数リテラルは、小数点を含む数値です。

たとえば、次のようなものです。

2.1
3.14
5.0
0.5

これらは、小数を表す数値です。

この違いを表で整理すると、次のようになります。

種類特徴
整数リテラル1、3、100小数点がない
浮動小数点数リテラル2.1、3.14、5.0小数点がある

数値は ' ' や " " で囲まない

数値リテラルで、まずしっかり押さえたい基本があります。

数値は ' ' や " " で囲みません。

これはとても大事です。たとえば、10 という数値を書きたいときは、次のように書きます。

10

これを "10" と書いてしまうと、Javaは数値ではなく文字列として扱います。また、'1' のように書くと、それは数字ではなく 1 という形の文字になります。

この違いを表にすると、次のようになります。

書き方意味
10数値
"10"文字列
'1'文字

数値として扱いたいなら、そのまま数字を書くことが大切です。

サンプルプログラムで数値の表記を見てみよう

ファイル名:Sample6.java

// いろいろな進数の整数を表示するプログラム
class Sample6
{
    public static void main(String[] args)
    {
        System.out.println("10進数の12は " + 12 + " です。");
        System.out.println("8進数の12は " + 012 + " です。");
        System.out.println("16進数の12は " + 0x12 + " です。");
        System.out.println("16進数のAは " + 0xA + " です。");
    }
}

このプログラムを実行すると、画面には次のように表示されます。

10進数の12は 12 です。
8進数の12は 10 です。
16進数の12は 18 です。
16進数のAは 10 です。

この結果からわかるのは、Javaでは同じように見える数字でも、書き方によって 何進数として読むか が変わるということです。

10進数はふだんの数の書き方

私たちが日ごろ使っている数の書き方は 10進数 です。

たとえば、

12
100
250

のような数は、特別な印をつけなければ基本的に10進数として扱われます。

Sample6.java の最初の行では、この10進数が使われています。

System.out.println("10進数の12は " + 12 + " です。");

ここで書かれている 12 は、そのまま10進数の12です。画面でも 12 と表示されます。

8進数は先頭に 0 をつける

Javaでは、整数を8進数で表すこともできます。8進数で書きたいときは、数値の先頭に 0 をつけます。

たとえば、

012

と書くと、これは10進数の12ではなく、8進数の12として扱われます。

8進数では使う数字が 0〜7 だけなので、12 は

1×8 + 2 = 10

を表します。つまり、10進数では 10 です。

Sample6.java の2行目は、この8進数の例です。

System.out.println("8進数の12は " + 012 + " です。");

実行結果はこうなります。

8進数の12は 10 です。

このように、同じ 12 でも、先頭に 0 がつくと意味が変わるのです。

16進数は先頭に 0x をつける

Javaでは、整数を16進数で表すこともできます。16進数で書くときは、先頭に 0x をつけます。

たとえば、

0x12
0xA
0xF

のように書きます。

16進数では、0〜9 に加えて A〜F も使います。A は 10、B は 11、C は 12、D は 13、E は 14、F は 15 を表します。

Sample6.java の3行目と4行目は、この16進数の例です。

System.out.println("16進数の12は " + 0x12 + " です。");
System.out.println("16進数のAは " + 0xA + " です。");

ここで、

  • 0x12 は 1×16 + 2 = 18
  • 0xA は 10

を表します。

実行結果はこうなります。

16進数の12は 18 です。
16進数のAは 10 です。

数値と文字列をつなぐときは + を使う

Sample6.java では、文字列と数値を組み合わせて出力しています。そのときに使っているのが + です。

たとえば、次の部分です。

"10進数の12は " + 12 + " です。"

これは、

  • 最初の文字列
  • 数値
  • 最後の文字列

をつないで、1つの出力内容にしています。

今の段階では、+ は つなぐために使っている くらいの理解で大丈夫です。詳しい意味はあとで学べば十分ですが、画面出力では 数値だけでなく説明文も一緒に出したい ことが多いので、とてもよく使う書き方です。

いろいろな表記をしても、画面には10進数で表示される

Sample6.java を見ると、コードの中では 10進数、8進数、16進数の表記を使っています。しかし、実行結果の画面ではどれも10進数で表示されています。

これは大切なポイントです。

たとえば、

  • 012 は 8進数として書いてある
  • 0x12 は 16進数として書いてある

のですが、Javaはそれを内部で数値として理解したうえで、画面には通常の10進数の形で出力しています。

つまり、書き方は違っても、最終的には その数が何を表しているか が大切なのです。

この点を表で整理すると、次のようになります。

コードでの表記表している数画面表示
1210進数の1212
0128進数の1210
0x1216進数の1218
0xA16進数のA10

【重要】整数には8進数や16進数の表記も使える

ここまでの内容で、特に大事なのは次の2点です。

  • 数値は ' ' や " " で囲まない
  • 整数は 8進数や16進数で表すこともできる

Javaでは、整数リテラルをいろいろな表記方法で書けます。ふだんは10進数を使うことが多いですが、場面によっては8進数や16進数も出てきます。そのため、先頭の書き方によって意味が変わることを知っておくことが大切です。

2進数とは何か

ここで、数の表し方そのものについても少し見ておきましょう。

私たちが普段使っている10進数は、0から9までの10種類の数字を使って数を表します。そのため、9の次で桁が繰り上がります。

一方、コンピュータの内部では 2進数 が使われています。2進数では 0 と 1 の2種類だけを使うので、1の次で桁が繰り上がります。

たとえば、2進数では次のようになります。

10進数2進数
00
11
210
311
4100

このように、2進数は桁が増えやすいのが特徴です。たとえば10進数の20は、2進数では 10100 になります。

なぜ8進数や16進数が使われるのか

コンピュータは内部で2進数を使っていますが、2進数は桁が長くなりやすく、人間が読むには少し見づらいことがあります。

そこで、2進数と相性がよい 8進数 や 16進数 がよく使われます。

  • 8進数は 0〜7 を使う
  • 16進数は 0〜9 と A〜F を使う

このような表記を使うと、2進数よりも短く書けるため、数値を扱いやすくなります。特に16進数は、コンピュータ関連の分野でよく登場します。

今の段階では、細かな変換を全部覚えなくても大丈夫です。まずは、

  • Javaでは整数を 10進数、8進数、16進数で書ける
  • それぞれ先頭の書き方が違う

という点を押さえておけば十分です。

10進数・2進数・8進数・16進数の対照表

数の表し方の違いを見やすくするために、10進数の 0〜20 を他の進数と比べた表を見てみましょう。

10進数2進数8進数16進数
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010
17100012111
18100102212
19100112313
20101002414

この表を見ると、どの進数で桁が繰り上がるのかがわかりやすいです。

  • 10進数は 9 の次で繰り上がる
  • 2進数は 1 の次で繰り上がる
  • 8進数は 7 の次で繰り上がる
  • 16進数は F の次で繰り上がる

この違いが、進数の違いそのものです。

数値リテラルを図でイメージしよう

数値リテラルは、同じ見た目の数字でも、先頭の書き方によって意味が変わります。

この図では、同じように数字が並んで見えても、先頭の書き方によってJavaの受け取り方が変わることがわかります。12 は普通の10進数ですが、012 は8進数、0x12 は16進数です。

つまり、Javaでは数値を見るときに、数字そのものだけでなく、先頭の形にも注目する必要があります。この感覚を持っておくと、今後コードの中でいろいろな数値表記が出てきても戸惑いにくくなります。

よくある見間違いに注意しよう

数値リテラルでは、次のような点で混乱しやすいです。

012 は 12 ではない

先頭に 0 がついているので、8進数として扱われます。

0x10 は 10 ではない

16進数として扱われるので、10進数では 16 です。

"10" は数値ではない

ダブルクォーテーションで囲まれているので文字列です。

'1' は数値ではない

1文字の文字リテラルです。

これを表で整理すると、次のようになります。

書き方実際の意味
1010進数の10
0108進数の10なので10進数では8
0x1016進数の10なので10進数では16
"10"文字列
'1'文字

見た目だけで判断せず、囲みや先頭の形まで含めて見ることが大切です。

数値リテラルを理解すると、Javaの数の見方が広がる

数値リテラルの基本がわかると、Javaのコードの中に書かれた数字を、ただの数字としてではなく、意味のある値として読めるようになります。さらに、10進数だけでなく8進数や16進数も使えると知ることで、コンピュータが数をどう扱っているのかにも少しずつ目が向くようになります。

最初は 012 や 0x12 のような表記に少し戸惑うかもしれませんが、基本のルールはとても素直です。

  • そのまま書けば10進数
  • 先頭に 0 をつければ8進数
  • 先頭に 0x をつければ16進数

この形をしっかり覚えておくと、数値に関するコードがぐっと読みやすくなります。