JavaのInt型とInteger型の違いについて

Java

はじめに

Javaでプログラムを書いていると、数値を扱う場面で intInteger のどちらを使えばいいの? と迷うことがあると思います。
見た目はほとんど同じなのに、エラーになったり、コレクションに入らなかったりと、最初のうちは「なんでこうなるの?」と戸惑いやすいポイントです。

本記事では、そんな intInteger の違い を初心者の方にも分かりやすく整理していきます。
まずはざっくりとした違いを押さえ、そこから特徴や具体例を見ていくことで、場面に応じた適切な使い分けができるようになることを目指します。

結論

まず最初に結論です。

  • int は「プリミティブ型」(軽くて高速、nullはNG)
  • Integer は「ラッパークラス」(オブジェクト、メソッドを持つ、null可)

普段の開発では 基本的に int を使っておけば問題ありません。
ただし、コレクションに数値を入れるときや、値が「ない」状態(null)を扱いたいときは Integer を選ぶ必要があります。

ここさえ押さえておけば、後に出てくるコード例もぐっと理解しやすくなるはずです。

Int型とは

int は Java のプリミティブ型のひとつで、もっとも基本的な整数のデータ型です。
軽量で処理が速く、メモリ使用量も少ないため、単純に整数を扱いたい場合は int を使うのがもっともシンプルで効率的 です。

また、int は オブジェクト ではないため、「値が入っていない状態」を示す null を扱うことはできません。
たとえば、int a = null; と書くとコンパイルエラーになります。

日常的な開発では、数値をそのまま計算したりループのカウンターに使ったりと、ほとんどの場面で int が使われます。
「余計な機能はいらないから、ただ数字を扱いたい」というときに最適な選択です。

Integer型とは

Integerint を包み込んだラッパークラスで、整数をオブジェクトとして扱えるようにしたものです。
オブジェクトであるため、null を代入できたり、数値に関する便利な※メソッドを利用できるといった特徴があります。

また、Integer は コレクション(List や Set など)に入れることができます。
これはコレクションが「オブジェクトだけを扱う仕組み」になっているためで、プリミティブ型の int はそのままでは入れられません。

例えば、

  • 値がない可能性を表現したいとき(null を扱う必要がある)
  • List に整数を入れたいとき
  • 数値をオブジェクトとして操作したいとき(メソッドが必要)

といった場面では Integer の出番になります。

具体的なコード例

ここでは、intInteger の違いが最も分かりやすくなるように、基本的なコードだけを使って比べてみます。

int と Integer の宣言の違い

int a = 10;          // プリミティブ型
Integer b = 10;      // ラッパークラス(オブジェクト)

見た目は似ていますが、b はオブジェクトとして扱われる点が大きな違いです。

null を扱えるかどうか

int x = null;        // エラーになる(null は入れられない)
Integer y = null;    // OK(null を入れられる)

null を使いたい場面が出てくる場合は、必ず Integer を使います。

コレクションに入れられるか

List<Integer> list = List.of(1, 2, 3);  // OK
// List<int> list = ...;               // これは書けない(エラー)

ListSet といったコレクションは「オブジェクトのみ」を扱う仕組みなので、int は使えません。
この場合は必ず Integer が必要になります。

使い分けの基準

基本は int を使えばOK

  • 計算したい
  • ループで使いたい
  • null の必要がない

多くの場面ではこれで問題ありません。


以下の状況では Integer が必要

  • null を扱いたい
    「値がまだ設定されていない」という状態を表現したいとき。
  • コレクションに入れたい
    List<Integer>Map<Integer, String> など。
  • オブジェクトとして扱いたい場合
    例えばメソッドを使いたいときなど。

まとめ

まとめ

結論として、日常的な開発では 基本的に int 型を使っておけば問題ありません。
軽量で扱いやすく、余計なことを気にせず数値処理ができるため、まずは int を基準に選ぶのが良いでしょう。

ただし、null を扱いたい場合コレクションで数値を扱う場合 のように、オブジェクトとしての性質が必要になる場面では Integer 型が活躍します。
両者の違いを理解した上で、「なぜここでは Integer を使っているのか?」を意識できるようになると、コードの品質や可読性も自然と上がっていきます。

語録集

※プリミティブ型:Javaが元から持っている最小単位のデータ型。intboolean など。軽量で高速。

※ラッパークラス:プリミティブ型をオブジェクトとして扱えるようにしたクラスのこと。IntegerBoolean など。

※オブジェクト:Javaの基本となる“モノ”のこと。色々な機能(メソッド)を持てる。

※メソッド:オブジェクトが持つ「機能」や「処理」のこと。toString() など。

※コレクション(Collection):複数のデータをまとめて扱う仕組み。ListSet など。

コメント

タイトルとURLをコピーしました