初心者向けに噛み砕いて、例題(実行できるJavaコード)と解説を交えて詳しく説明します。読みやすく段階を追って進めます。
「整数リテラル」とは、プログラムの中で「そのまま書かれた数」のことです。
例:123、0b1010、0xFF など。値そのものをソースコードに書いたものです。
1. 書き方(代表パターン)
- 10進数(普通)
そのまま書く。例:123,0,-45(負の数はリテラル自体は45、-は単項演算子)。int a = 123; - 2進数(binary)(Java 7 以降)
0bまたは0Bを先頭につける。
例:0b111111010(これ = 506)。int b = 0b111111010; // 506 - 8進数(octal)
先頭に0をつける(例:0772)。注意:先頭ゼロは昔からの習慣で間違いやすい(後述)。int c = 0772; // 506(8進数) - 16進数(hexadecimal)
0xまたは0Xを先頭につける。例:0x1fa(これ = 506)。int d = 0x1fa; // 506 long型のリテラル
値がintの範囲(約 ±2^31)を超える場合はLまたはlを付けてlongを表します。慣例として大文字Lを使う(小文字lは数字の1と見間違えるため)。long big = 12345678901L;- 読みやすくするアンダースコア(
_)(Java 7 以降)
大きな数を見やすくするために桁区切りとして_を使える(ただし先頭・末尾・連続・小数点直前直後など場所には制約あり)。int million = 1_000_000;
2. 同じ値を違う表記で書く例(重要な理解)
同じ「数」でも書き方が違うだけで、プログラム内では同じ値になります。
例:10進 506、2進 0b111111010、8進 0772、16進 0x1fa はすべて 同じ値(506) です。
class SameValue {
public static void main(String[] args) {
System.out.println(506); // 10進
System.out.println(0b111111010); // 2進 -> 506
System.out.println(0772); // 8進 -> 506
System.out.println(0x1fa); // 16進 -> 506
}
}
Java出力
506
506
506
506
3. よくある注意点(初心者がハマりやすいポイント)
- 文字列と数字を混同しない
"123"は文字列(String)で、123は数(int)。計算したければ数にする必要がある。System.out.println("123" + 1); // "1231"(文字列連結) System.out.println(123 + 1); // 124(数の加算) - 先頭に
0を付けると「8進数」扱いになる
たとえば010は十進の 10 ではなく、8進の 10 → 8(十進)になります。意図せず0を入れるとバグの元です。
→ 普段は先頭0を付けないようにするか、明示的に0x(16進)や0bを使いましょう。 intの範囲を超えたらlongを使う(Lを付ける)
たとえば12345678901はintに収まらないため、12345678901Lとする必要があります。Lがないとコンパイルエラーになります。- アンダースコアの使い方に注意
1_000_000は OK、_1000や1000_はNG。小数点周りも制限あり(整数リテラルに使う分には比較的シンプル)。 - オーバーフロー
計算でintの最大値を超えると「オーバーフロー」して負の値になったりします。大きな値を扱うときは型をlongにするか、BigIntegerを使います。
4. 実践的な例(サンプルコード) — コメントつきで解説します
例 A:10進・2進・16進を足して表示する
class ExampleA {
public static void main(String[] args) {
int dec = 100; // 10進
int bin = 0b1100100; // 2進(100)
int hex = 0x64; // 16進(100)
System.out.println(dec + bin + hex); // 100 + 100 + 100 = 300
}
}
Java出力
300
例 B:アンダースコアと long の例
class ExampleB {
public static void main(String[] args) {
int million = 1_000_000; // 可読性のためのアンダースコア
long big = 3_000_000_000L; // long のリテラルには L を付ける
System.out.println(million);
System.out.println(big);
}
}
Java出力
1000000
3000000000
例 C:先頭の 0 による落とし穴(避けるべき)
class ExampleC {
public static void main(String[] args) {
int a = 010; // 8進の "10" -> 8(10進ではない)
System.out.println(a); // 出力は 8
}
}
Java出力
8
→ 010 を 10 と誤解するとバグになります。数字の先頭に 0 を付けるクセはつけない方が安全。
5. 練習問題(手を動かして確認しよう)
0b1010、012、0xAはそれぞれ何(10進)になる?
答:0b1010= 10、012(8進) = 10、0xA= 10(すべて同じ)- 次のコードの出力は?(予想してから実行してみよう)
class Q2 { public static void main(String[] args) { System.out.println("5" + 3); System.out.println(5 + 3); } }答:53 8 int x = 2147483647 + 1;の結果は?(2147483647はintの最大値)
答:オーバーフローして-2147483648になる(意図しない結果に注意)。long l = 3000000000;はコンパイルする?もしエラーになるなら直すにはどうする?
答:エラー(数値がintの範囲を超える)。long l = 3000000000L;のようにLを付ける。int y = 1_2_3_4;は OK?→ 答:OK(アンダースコアは桁区切りとして使えるが、見やすさのため適切に使おう)
6. まとめ(要点だけ短く)
- 整数リテラルは「数そのもの」をコードに直接書く方法。
- 10進・2進(
0b)・8進(先頭0)・16進(0x)がある。 - 先頭
0に注意(8進になってしまう)。 longは末尾にLを付ける。_は桁区切りに使える(ただしルールあり)。- 文字列
"123"と数123は違う → 計算したければ数で書く。
