はじめに
Java を学習していると、long と Long という よく似た2つの型 が出てきて、
「何が違うの?」「どちらを使えばいいの?」と迷うことがあると思います。
本記事では、エンジニア初学者の方向けに
long と Long(ラッパークラス)の違い を、
できるだけ噛み砕いて 紹介します。
Java のデータの種類
Java では 2つのデータの扱い方 があります
✅ ① プリミティブ(基本型)
- Java に最初からある シンプルな数値型
- 例:
int,long,double,booleanなど - 値そのものを扱う
- メモリ効率がよく、処理が速い
✅ ② ラッパークラス(Wrapper Class)・オブジェクト
- プリミティブを オブジェクトとして扱えるように包んだクラス
-
Integer,Long,Double,Booleanなどがある -
Longはlongのラッパークラス (ウィキペディア)
📌 long(プリミティブ)の特徴
long price = 100L;
✔ 数値そのもの
✔ メモリ効率がよい(高速)
✔ null を扱えない → 必ず値がある必要がある
✔ 配列に使えるが、オブジェクトを扱う仕組み(コレクション)には使えない場合がある (Java Handbook)
📌 Long(ラッパークラス)(オブジェクトクラス)の特徴
Long id = 100L;
✔ long の値を オブジェクトとして扱う
✔ null を扱える(値がまだない状態を表せる) (Java Handbook)
✔ メソッドが使える(例:toString() で文字列化できる) (Oracle Docs)
✔ Java のコレクションに使える(例:List<Long>)
✔ オブジェクトなのでメモリは少し多く使う (Java Handbook)
📍 なぜ両方あるの?
🟢 long を使う場面
✔ 数値を 計算する時
✔ パフォーマンスが大事な時
✔ null が不要な時
🟡 Long を使う場面
✔ null を扱いたい時
→ まだ値が無い場合を表現できる
✔ オブジェクトが必要な場面
→ 例:Map や List など コレクションで扱う場合 (Java Handbook)
List<Long> list = new ArrayList<>();
※ long ではこう書けない!!
オートボクシング/アンボクシング
Java には自動で変換してくれる便利な仕組みがあります。
🔁 オートボクシング(自動変換)
long → Long に自動で変換
Long obj = 10L; // 自動で Long.valueOf(10L)
🔄 アンボクシング(自動変換)
Long → long に自動で変換
long value = obj;
この仕組みによって、両者を意識せずに書けるようになっています (Java Handbook)
📊 比較まとめ
| 項目 | long(プリミティブ) | Long(ラッパークラス) |
|---|---|---|
| 値の扱い | 数値そのもの | オブジェクト |
| null の扱い | ❌ できない | ✅ できる |
| メソッド | ❌ なし | ✅ あり |
| コレクション利用 | ❌ できない | ✅ できる |
| メモリ使用量 | 軽い | やや重い |
イメージまとめ
📌 long は数そのもの
long x = 100;
📌 Long は数を包んだ箱
Long x = new Long(100);
この箱のおかげで、
✔ メソッドが使える
✔ コレクションに入れることができる
✔ null を表現できる
さいごに
本記事では、long と Long の違いについて
初学者の視点で整理して紹介しました。
Java 学習を進めていくと、
「なぜここは Long なんだろう?」と疑問に思う場面が出てきますが、
今回の内容を思い出してもらえれば、理解しやすくなると思います。
少しでも学習の参考になれば幸いです。