Java | 数値リテラルとサフィックスの基礎

Java Java
スポンサーリンク

Javaの数値リテラルとサフィックスの基礎

最初は「そのまま書いた数字が、どの型として扱われるのか」を理解するのが近道です。型はメモリの使い方や計算の精度に関わるので、初心者でも早めに慣れておくとつまずきにくくなります。


数字を書いたときの「デフォルトの型」

  • 整数のデフォルト: 何も付けないと int として扱われる
  • 小数のデフォルト: 何も付けないと double として扱われる
  • サフィックス: 数字の末尾に文字を付けることで「型を指定」できる(例: LlongFfloat

整数リテラルと long のサフィックス L

まずは int の限界を知る

  • ポイント: int は約21億まで。それを超えるとコンパイルエラー。
  • 対策: 末尾に L(小文字の l ではなく大文字推奨)を付けて long にする。

例題 1: これ、動く?動かない?

public class Main {
    public static void main(String[] args) {
        System.out.println(2147483647);   // intの最大値 → OK
        System.out.println(2147483648);   // intを超える → エラー
        System.out.println(2147483648L);  // longにする → OK
    }
}
Java
  • 解説: 2147483648 は int の範囲外。L を付けると「これは long だよ」と教えられるので通る。

例題 2: 変数に入れてみる

public class Main {
    public static void main(String[] args) {
        long big = 2200000000L; // Lが必要
        int small = 100;        // これはそのままでOK
        System.out.println(big + small);
    }
}
Java
  • コツ: 「桁が多いな」「21億超えそうだな」と感じたら L を付ける癖をつける。

小数リテラルと float のサフィックス F

double がデフォルト

  • ポイント: 小数は勝手に double になる。
  • 対策: float を使いたいなら末尾に F(または f)を付ける。

例題 3: float に代入するときの落とし穴

public class Main {
    public static void main(String[] args) {
        float a = 3.14;   // エラー(3.14はdoubleとして扱われる)
        float b = 3.14F;  // OK(Fでfloat指定)
        double c = 3.14;  // OK(doubleがデフォルト)
        System.out.println(b + c);
    }
}
Java
  • 解説: floatdouble より精度が低いので、明示的に F で指定しないと「勝手に精度を下げる」ことになり、エラーで止めてくれる。

例題 4: 科学記法でも F が必要

public class Main {
    public static void main(String[] args) {
        float x = 1.0e3F;  // 1000.0 を float で
        double y = 1.0e3;  // 1000.0 を double で
        System.out.println(x + ", " + y);
    }
}
Java
  • コツ: 小数+float変数の組み合わせでは「とりあえず F を付ける」が安全。

存在しないサフィックス(short と byte)

  • 短い整数(short, byte): 末尾に付ける専用サフィックスはない
  • 代入のルール: 基本は int として書いて、変数が shortbyte なら代入時に型に合わせて扱われる

例題 5: short, byte に代入

public class Main {
    public static void main(String[] args) {
        short s = 100;   // OK(100はintとして書いているがshortに収まる)
        byte b = 127;    // OK(byteの最大値)
        byte c = 128;    // エラー(byteの範囲外)
        System.out.println(s + ", " + b);
    }
}
Java
  • 注意: 範囲外はもちろんエラー。サフィックスで救えないので「値の範囲」を意識する。

よくあるエラーと対処法

  • 大きな整数でエラー: 末尾に L を付ける(例: 2200000000L
  • float に小数でエラー: 末尾に F を付ける(例: 7.8F
  • short/byte に範囲外代入: 値を小さくするか型を見直す(例: byte ではなく int を使う)

練習問題(自分の手で動かして理解しよう)

練習 1: これはコンパイルできる?

  • 問題:
long a = 9999999999;
Java
  • やること: コンパイルしてみる。ダメならどう直す?
  • ヒント: 末尾に何かを付ける。

練習 2: float の正しい初期化

  • 問題:
float pi = 3.1415926535;
Java
  • やること: 正しい形に直す。double でも作って比較してみる。
  • ヒント: サフィックス、そして精度の違いに注目。

練習 3: byte の限界に挑戦

  • 問題:
byte max = 127;
byte over = 128;
Java
  • やること: どちらがコンパイルできるか確認。もし 128 を使いたいなら、どういう型にすべき?

使い分けの感覚をつかむヒント

  • 大きい整数には long: 「21億」を超える可能性があるなら long にしておく。末尾 L を忘れない。
  • 小数は基本 double: 計算の精度を保ちやすい。float は「大量の配列でメモリ節約したい」「グラフィックスやセンサー値で十分」といった用途で使う。
  • 短い整数(byte/short)は特別な理由があるときだけ: 通常は int が使いやすく安全。

まとめ

  • 整数は int、小数は double が基本。例外的に使うときはサフィックスで明示する。
  • long は L、float は F。小文字よりも見やすい大文字を使うのがおすすめ。
  • short/byte 用のサフィックスはない。値の範囲に注意。
タイトルとURLをコピーしました