Javaの数値リテラルとサフィックスの基礎
最初は「そのまま書いた数字が、どの型として扱われるのか」を理解するのが近道です。型はメモリの使い方や計算の精度に関わるので、初心者でも早めに慣れておくとつまずきにくくなります。
数字を書いたときの「デフォルトの型」
- 整数のデフォルト: 何も付けないと
intとして扱われる - 小数のデフォルト: 何も付けないと
doubleとして扱われる - サフィックス: 数字の末尾に文字を付けることで「型を指定」できる(例:
Lでlong、Fでfloat)
整数リテラルと 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- 解説:
floatはdoubleより精度が低いので、明示的に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として書いて、変数がshortやbyteなら代入時に型に合わせて扱われる
例題 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 用のサフィックスはない。値の範囲に注意。
