JavaのIntegerとは?intとの違い・比較の落とし穴・使い分け
CONTENTS
Javaで整数を扱うとき、intとIntegerのどちらを使うべきか迷う場面は少なくありません。 一見すると同じ「数値」ですが、nullの扱い、比較方法、コレクションとの相性など、実務では明確な違いがあります。
結論から言うと、計算ロジックはint、未設定があり得る境界はIntegerという使い分けが最も安全です。 この判断を誤ると、NullPointerExceptionや比較バグにつながります。
本記事では、Integerとintの基礎から、オートボクシングの落とし穴、比較・変換の注意点、 そして現場で迷わない使い分け基準までを整理します。
Integerとintの基礎を押さえる
まず理解すべきなのは、intはプリミティブ型、Integerは参照型という点です。 この違いが、nullや比較の挙動に直結します。
intはプリミティブ型で値そのものを持つ
intは値そのものを直接保持する型です。 オブジェクト生成を伴わないため、高速かつ軽量に扱えます。
- 計算処理・集計処理に向いている
- nullは扱えない
- ローカル変数は初期化必須
なお、フィールドとして宣言したintは自動的に0で初期化されます。 そのため、「未設定」と「0」の区別が必要な設計では注意が必要です。
Integerはラッパークラスでnullを扱える
Integerはintをオブジェクトとして扱うためのラッパークラスです。 参照型なので、nullを持てます。
- DBのNULLや外部入力を自然に表現できる
- コレクション(List / Map)で利用可能
- 境界値(MAX_VALUE / MIN_VALUE)を定数で扱える
一方で、nullのまま計算に使うと例外が発生します。 この点は後ほど詳しく解説します。
intとIntegerの主な違い
実務で特に差が出やすいポイントは次の4つです。
- nullを扱えるか
- コレクションとの相性
- パフォーマンス
- 比較方法
nullを扱えるかどうか
intはnullを持てません。 そのため「未設定」「欠損」を表現できません。
一方、Integerはnullを扱えます。 DBや外部APIとの境界では便利ですが、そのまま使うと危険です。
特に注意すべきなのが、アンボクシング時のNullPointerExceptionです。 詳しくは以下の記事で実例付きで解説しています。
👉 java.lang.NullPointerExceptionの原因と直し方を最短で解説
コレクション(ListやMap)との相性
Javaのコレクションは参照型しか扱えません。 そのため、整数をListやMapに入れる場合はIntegerを使います。
特にArrayListを使う場面では、intとの違いを理解しておくと設計ミスを防げます。
👉 JavaのArrayListとは?配列との違い・使い方・実務での注意点
メモリとパフォーマンスの違い
パフォーマンス面ではintが有利です。 Integerはオブジェクト生成・GCのコストが発生します。
実務では次のように役割分担すると安全です。
- 入力・DB・API境界:Integer
- 内部ロジック・計算処理:int
オートボクシングとアンボクシングの落とし穴
JavaではintとIntegerの変換が自動で行われます。 これをオートボクシング/アンボクシングと呼びます。
Integer a = 10;
int b = a;
便利ですが、nullが混ざると一気に危険になります。
nullのIntegerをアンボクシングすると、実行時に例外が発生します。
Integer n = null;
int x = n; // NullPointerException
Integerの比較でやってはいけないこと
Integerの比較で最も多いミスは、==を使ってしまうことです。
==は値ではなく参照を比較します。 そのため、結果が環境や値によって変わることがあります。
比較の正しい考え方は、以下の記事で詳しく解説しています。
👉 Javaの文字列比較を徹底解説|==とequalsの違い・安全な比較方法
Integerでも基本は同じです。
- 等価比較:equals / Objects.equals
- 大小比較:compareTo / Comparator
実務での使い分け基準(迷ったらこれ)

最後に、迷ったときの判断基準をまとめます。
- 計算・内部ロジック → int
- DB・外部入力・API境界 → Integer
- nullを許すなら、境界で必ず潰す
このルールを守るだけで、バグとレビューコストを大幅に減らせます。
つまずいたら、現役エンジニアと一緒に解決しよう
Integerとintの使い分けやnull設計は、独学だと理解が曖昧になりやすいポイントです。 実務レベルで確実に身につけたい方は、Zerocodeで現役エンジニアのサポートを受けながら学ぶのも一つの方法です。
設計・コードレビューで理解を定着。
Java / SQL / Spring Bootを体系的に習得。