Java道|Java数値リテラルの基本

数字はただの数字に見えても、Javaでは書き方で意味が変わる。
数値リテラルの基本を知って、10進数・8進数・16進数を読み分けよう。

Javaでは、文字や文字列だけでなく、数値そのものをコードの中に直接書くことができます。

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

1
100
3.14
5.0

これらのように、Javaのコードの中に直接書かれた数値を 数値リテラル といいます。

数値リテラルは、計算をするとき、回数を数えるとき、条件を比べるとき、データの位置を指定するときなど、Java学習のさまざまな場面で登場します。だからこそ、早い段階で 数値はどのように書くのか を整理しておくことが大切です。

鬼滅の刃の世界観にたとえるなら、数値リテラルは 技の威力や回数を示す力札 のようなものです。

Javaの値意味鬼滅風のたとえ
1210進数の数値普通の力札
0128進数の数値8の型で読む力札
0x1216進数の数値16の型で読む力札
"12"文字列数字に見える文字の巻物
'1'文字1という形の1文字札

Javaでは、数値は基本的にそのまま数字を書きます。
文字列のように " " で囲んだり、文字のように ' ' で囲んだりはしません。

数値リテラルとは何か

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

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

1
3
100
2.1
3.14
5.0

これらは、数値そのものを表しています。

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

ここで大切なのは、Javaでは 数値として書かれているのか、文字列として書かれているのか、文字として書かれているのか をきちんと区別するということです。

100
"100"
'1'

この3つは見た目が似ていますが、Javaでは別物です。

鬼滅風にたとえるなら、100 は威力100の力札です。
"100" は 100 と書かれた巻物です。
'1' は 1 という形の1枚の文字札です。

見た目が数字に見えても、囲み方が違えば役割も変わります。

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

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

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

整数リテラル

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

1
3
100
2026

これらはすべて整数です。

鬼滅風に言えば、整数リテラルは「1回」「3回」「100の力」のように、きっちり数えられる力札です。

浮動小数点数リテラル

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

2.1
3.14
5.0
0.5

これらは小数を表します。

鬼滅風にたとえるなら、浮動小数点数リテラルは「3.14の間合い」「0.5歩の調整」のように、細かい量を表す力札です。

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

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

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

たとえば、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では同じように見える数字でも、書き方によって 何進数として読むか が変わるということです。

コードでの表記Javaでの読み方画面表示
1210進数の1212
0128進数の1210
0x1216進数の1218
0xA16進数のA10

鬼滅風に言えば、同じ 12 という札に見えても、普通の力札なのか、8の型で読む札なのか、16の型で読む札なのかで、実際の威力が変わるということです。

10進数はふだん使っている数の書き方

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

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

12
100
250

Javaでは、整数に特別な印を付けずに書くと、基本的に10進数として扱われます。

Sample6.javaでは、次の部分です。

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

ここで書かれている 12 は、そのまま10進数の12です。

実行結果は次のようになります。

10進数の12は 12 です。

10進数は、0から9までの数字を使って数を表します。
9の次で桁が繰り上がるのが特徴です。

10進数の特徴内容
使う数字0〜9
桁が上がるタイミング9の次
Javaでの書き方12、100、250 のように普通に書く

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

Javaでは、整数を8進数で表すこともできます。

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

012

これは10進数の12ではありません。
Javaでは、先頭に 0 が付いているため、8進数の12として扱われます。

8進数では、0〜7 の数字を使います。
そのため、8進数の12は、次のように考えます。

1×8 + 2 = 10

つまり、8進数の12は、10進数では10です。

Sample6.javaでは、次の部分です。

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

実行結果は次のようになります。

8進数の12は 10 です。
表記意味
1210進数の12
0128進数の12、10進数では10

ここはとても間違えやすいポイントです。

鬼滅風に言えば、先頭の 0 は「この札は8の型で読む」という印です。
普通の 12 と同じ見た目に近くても、先頭に 0 があるだけで読み方が変わります。

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

Javaでは、整数を16進数で表すこともできます。

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

0x12
0xA
0xF

16進数では、0〜9 に加えて、A〜F も使います。

16進数の記号10進数での意味
A10
B11
C12
D13
E14
F15

Sample6.javaでは、次の2つが16進数の例です。

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

0x12 は、次のように考えます。

1×16 + 2 = 18

そのため、画面には18と表示されます。

16進数の12は 18 です。

また、0xA は10を表します。

16進数のAは 10 です。
表記意味10進数での値
0x1216進数の1218
0xA16進数のA10
0xF16進数のF15
0x1016進数の1016

鬼滅風に言えば、0x は「この札は16の型で読む」という印です。
0xA は、Aという文字に見えますが、16進数では10を表します。

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

Sample6.javaでは、文字列と数値を組み合わせて画面に出力しています。

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

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

これは、次の3つをつないでいます。

部分種類
"10進数の12は "文字列
12数値
" です。"文字列

ここでは、+ を使って文字列と数値をつないでいます。

今の段階では、+ は 表示したい内容をつなぐために使っている くらいの理解で大丈夫です。

画面出力では、数値だけを出すよりも、説明文と一緒に表示したいことがよくあります。

10進数の12は 12 です。

このように表示すると、数値の意味が分かりやすくなります。

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

Sample6.javaでは、コードの中に10進数、8進数、16進数が出てきます。

12
012
0x12
0xA

しかし、実行結果ではどれも通常の10進数の形で表示されます。

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

これは、Javaがそれぞれの表記を数値として読み取ったあと、画面には分かりやすい10進数の形で出力しているからです。

つまり、コードにどう書いたかと、画面にどう表示されるかは、必ずしも同じではありません。

鬼滅風に言えば、力札には8の型や16の型で書かれていても、修行結果として表示されるときには、通常の力の値として示されるようなものです。

整数には8進数や16進数の表記も使える

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

大切なポイント内容
数値は ' ' や " " で囲まない囲むと文字や文字列になる
整数は8進数や16進数でも書ける先頭の形で読み方が変わる

Javaでは、整数リテラルをいろいろな表記方法で書けます。

ふだんは10進数を使うことが多いですが、コードの中では8進数や16進数が出てくることもあります。

表記方法書き方
10進数そのまま書く12
8進数先頭に0をつける012
16進数先頭に0xをつける0x12

数値を見るときは、数字そのものだけでなく、先頭に何が付いているか まで確認しましょう。

2進数とは何か

コンピュータの内部では、数値は 2進数 と深く関係しています。

2進数では、0 と 1 の2種類だけを使って数を表します。

10進数では、0〜9を使い、9の次で桁が繰り上がります。
2進数では、0と1だけを使うため、1の次で桁が繰り上がります。

10進数2進数
00
11
210
311
4100

10進数の20は、2進数では次のようになります。

10100

2進数はコンピュータにとって基本的な表し方ですが、人間が読むには桁が長くなりやすいです。

鬼滅風にたとえるなら、2進数はコンピュータ内部の隠密暗号です。
0 と 1 だけで正確に表せる一方で、人間が読むには少し長くなりやすいのです。

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

コンピュータは内部で2進数を使います。

しかし、2進数は桁が長くなりやすいため、人間が読むには少し大変です。

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

進数使う記号特徴
2進数0、1コンピュータ内部と相性がよい
8進数0〜72進数を短く表しやすい
16進数0〜9、A〜Fコンピュータ関連でよく使われる
10進数0〜9人間が普段使う

特に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の次

鬼滅風にたとえるなら、各進数はそれぞれ違う型の数え方です。
10の型は9の次で進み、2の型は1の次で進み、8の型は7の次で進み、16の型はFの次で進みます。

図:数値リテラルの読み方

↓クリックすると拡大表示されます。

この図は、12、012、0x12 の違いを比較する図です。

この図から分かることは、同じように数字が並んで見えても、Javaでは先頭の形によって読み方が変わるということです。

12 は10進数、012 は8進数、0x12 は16進数です。
数値リテラルを読むときは、数字の中身だけでなく、先頭に 0 や 0x が付いていないかを確認することが大切です。

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

数値リテラルでは、見た目が似ているために混乱しやすい表記があります。

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

012 は12ではない

012

先頭に 0 が付いているため、8進数として扱われます。
10進数の12ではありません。

0x10 は10ではない

0x10

これは16進数の10です。
10進数では16です。

"10" は数値ではない

"10"

ダブルクォーテーションで囲まれているため、文字列です。
計算に使う数値としての10ではありません。

'1' は数値ではない

'1'

これは1という形の文字です。
数値の1ではありません。

鬼滅風に言えば、見た目だけで力札を判断してはいけません。
札の先頭の印や、囲みの有無まで見て、どの型の札なのかを判断する必要があります。

図:見間違いやすい数値表記

↓クリックすると拡大表示されます。

この図は、10、010、0x10、"10"、'1' の違いを比較する図です。

この図から分かることは、見た目が似ていても、Javaでは書き方によって意味が大きく変わるということです。

010 は8進数、0x10 は16進数、"10" は文字列、'1' は文字です。
数値リテラルを読むときは、先頭の形と囲み方を必ず確認しましょう。

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

数値リテラルの基本が分かると、Javaコードの中に書かれた数字を、ただの数字としてではなく、意味のある値として読めるようになります。

特に大切なのは、次の3つです。

書き方Javaでの扱い
そのまま書く10進数
先頭に 0 を付ける8進数
先頭に 0x を付ける16進数

さらに、囲み方にも注意が必要です。

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

数値リテラルは、これから計算、条件分岐、繰り返し、配列などを学ぶときに何度も登場します。

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

そのまま書けば10進数。
先頭に 0 を付ければ8進数。
先頭に 0x を付ければ16進数。
" " で囲めば文字列。
' ' で囲めば文字。

この見分け方を身につけておくと、Javaコードの中の数字がぐっと読みやすくなります。