Javaのint型とは?Integerとの違いや使い方をわかりやすく解説!

2025年8月12日火曜日

Java

Javaプログラミングの学習で多くの人が最初に出会うJavaのint型。これは整数を扱う上で欠かせない基本的な要素です。

この記事では、int型の基本的な使い方から、少し発展的なIntegerクラスとの違い、そして初心者が陥りがちな注意点まで、サンプルコードを交えながら網羅的に解説します。

この記事を読み終える頃には、int型を自信を持って使いこなせるようになっているでしょう。

この記事で学べること

  • Javaのint型の基本的な役割と使い方
  • int型とIntegerクラスの明確な違い
  • 他の整数型(byte, short, long)との使い分け
  • プログラミングで注意すべき7つのポイント
  • 配列やメソッドでの実践的なint型の活用法

Javaのint型とは?データ型の基本をサクッと理解

ここでは、Javaプログラミングの基礎である「データ型」と、その中でも特に重要な「int型」の役割について解説します。プログラムがどのようにデータを扱っているのか、その仕組みの第一歩を学びましょう。

  • intは「プリミティブ型」の代表格
  • なぜint型を学ぶのが重要なのか?

intは「プリミティブ型」の代表格

プログラミングにおいてデータ型とは、データを種類ごとに分類するための「型」のことです。例えば、数値を扱う型、文字を扱う型などがあります。

Javaのint型は、その中でも「プリミティブ型」と呼ばれるグループに属し、「整数」を格納するために使われます。

イメージとしては、整数を入れるためのシンプルな「箱」のようなものです。

【イメージ:データ型の箱】

  整数を入れる箱      文字を入れる箱
  +-----------+      +-----------+
  |    100    |      |    'A'    |
  +-----------+      +-----------+
     (int型)            (char型)

この「プリミティブ型」は、Javaが標準で用意している基本的なデータ型で、高速に動作するという特徴があります。

なぜint型を学ぶのが重要なのか?

int型は、プログラムの中で非常に多くの場面で登場します。
例えば、以下のような身近なものを数えるときに活躍します。

  • 商品の値段や個数
  • ユーザーの年齢
  • 処理を繰り返す回数(ループカウンター)

このように、Javaでプログラムを作成する上でint型は避けて通れないため、その使い方を正しく理解することがJava習得の第一歩となります。

Javaのint型の基本的な使い方をマスターしよう

ここでは、実際にJavaのコードでint型をどのように使うのか、基本的な操作方法を解説します。変数の宣言から計算、そして結果の表示まで、一連の流れを追いながら学んでいきましょう。

  • 変数の宣言と初期化
  • 四則演算と剰余
  • 値の出力方法

変数の宣言と初期化

Javaでint型の値を使うには、まず「変数」を宣言する必要があります。変数宣言とは、データを入れておくための箱(メモリ領域)に名前を付ける作業です。

変数の宣言と同時に値を入れることを「初期化」と呼びます。

// int型の変数を宣言
int score;

// 変数に値を代入
score = 80;

// 宣言と初期化を同時に行う
int age = 25;

四則演算と剰余

int型の変数を使えば、足し算や引き算などの計算が簡単に行えます。
基本的な計算には、以下の演算子を使います。

  • + (足し算)
  • - (引き算)
  • * (掛け算)
  • / (割り算)
  • % (剰余:割り算の余り)
int a = 10;
int b = 3;

// 足し算
int sum = a + b; // 結果は 13

// 引き算
int difference = a - b; // 結果は 7

// 掛け算
int product = a * b; // 結果は 30

// 割り算
int quotient = a / b; // 結果は 3 (小数点以下は切り捨て)

// 剰余
int remainder = a % b; // 結果は 1 (10を3で割った余り)

値の出力方法

計算した結果や変数の値は、コンソールに出力して確認できます。
値の出力には `System.out.println()` を使います。

public class Main {
    public static void main(String[] args) {
        int price = 500;
        int tax = 50;
        int totalPrice = price + tax;

        // 変数の値を出力する
        System.out.println(totalPrice);
    }
}

実行結果

550

【徹底比較】Javaのint型とIntegerクラスの違いとは?

Javaにはint型とよく似た「Integerクラス」が存在します。両者は整数を扱う点で共通していますが、その性質には大きな違いがあります。ここでは、両者の違いを明確にし、使い分け方を解説します。

  • プリミティブ型 vs ラッパークラス
  • オートボクシングとアンボクシング
  • Integerクラスの便利なメソッド

プリミティブ型 vs ラッパークラス

最も大きな違いは、intが「プリミティブ型」であるのに対し、Integerは「ラッパークラス」である点です。
ラッパークラスは、プリミティブ型をオブジェクトとして扱えるように包んだ(ラップした)ものです。

【メモリ上のイメージ】

  [スタック領域]          [ヒープ領域]

   int a = 10;
  +-----------+
  | a |  10   |
  +-----------+

  Integer b = new Integer(20);
  +-----------+         +-----------------+
  | b | アドレス| ----> |  Integer(20)  |
  +-----------+         +-----------------+
  (値そのもの)          (オブジェクトの実体)

この違いにより、機能面で差が生まれます。主な違いを以下の表にまとめました。

項目 int (プリミティブ型) Integer (ラッパークラス)
分類 プリミティブ型 参照型 (クラス)
初期値 0 null
nullの代入 不可 可能
メソッド 持たない 多数の便利メソッドを持つ
パフォーマンス 高速 intよりは低速

オートボクシングとアンボクシング

通常、プリミティブ型と参照型は直接代入できません。しかし、intとIntegerの間では、Javaが自動的に型を変換してくれます。
この便利な機能をそれぞれ「オートボクシング」「アンボクシング」と呼びます。

  • オートボクシング: int型からInteger型への自動変換
  • アンボクシング: Integer型からint型への自動変換
// int型からInteger型へ自動変換 (オートボクシング)
int primitiveInt = 100;
Integer wrappedInt = primitiveInt; // Javaが裏側で new Integer(100) を実行

// Integer型からint型へ自動変換 (アンボクシング)
Integer anotherWrappedInt = new Integer(200);
int anotherPrimitiveInt = anotherWrappedInt; // Javaが裏側で anotherWrappedInt.intValue() を実行

この機能のおかげで、両者の違いを意識しすぎずにコードを書くことが可能です。

Integerクラスの便利なメソッド

Integerクラスはオブジェクトであるため、便利なメソッドを多数持っています。
例えば、文字列をint型に変換する`parseInt()`メソッドは非常によく使われます。

// 文字列 "123" を int型に変換する
String numberStr = "123";
int number = Integer.parseInt(numberStr);

// 計算も可能
System.out.println(number + 7); // 結果は 130

他にも、数値を比較する`compare()`メソッドなど、int型にはない便利な機能が用意されています。

他の整数型とJava int型の違いは?使い分けを完全ガイド

Javaにはint型以外にも整数を扱うデータ型が存在します。それぞれの型が持つ特徴を理解し、メモリや扱う数値の大きさに応じて適切に使い分けることが、質の高いプログラム作成につながります。

  • byte型、short型、long型との比較
  • 各データ型の使い分けシナリオ
  • なぜ「int型」が標準なのか?

byte型、short型、long型との比較

Javaの整数型には、扱える値の範囲によって4つの種類があります。
それぞれの型はメモリ上で使用するサイズが異なり、扱える数値の範囲も変わります。

データ型 サイズ 値の範囲
byte 8ビット -128 ~ 127
short 16ビット -32,768 ~ 32,767
int 32ビット -2,147,483,648 ~ 2,147,483,647
long 64ビット 約-922京 ~ 約922京

特にlong型の数値を扱う際は、数値の末尾に `L` または `l` を付けるルールがあります。

// long型の変数を初期化
long population = 7800000000L; // 末尾にLを付ける

各データ型の使い分けシナリオ

基本的には `int` を使いますが、特定の状況では他の型を選択するのが適切です。

  • byte
    • ファイルのバイナリデータや画像データなど、メモリ消費を極力抑えたい場合に利用。
  • short
    • `byte`では足りないが`int`ほどの範囲は不要な場合。ただし、あまり使われません。
  • int
    • 年齢、個数、IDなど、一般的な整数を扱う際の第一選択肢。
  • long
    • 国の予算やファイルのサイズ、ミリ秒単位の時間など、`int`の範囲(約21億)を超える巨大な数を扱う場合に利用。

なぜ「int型」が標準なのか?

ほとんどの場面で`int`型が使われるのには理由があります。

それは、現在の多くのコンピュータのCPUが32ビット単位での処理を最も効率的に行えるように設計されているためです。

`byte`や`short`を使っても、CPU内部では結局32ビットに拡張して計算されることが多く、必ずしもメモリ節約や速度向上の効果があるとは限りません。そのため、特別な理由がない限りは`int`型を使うのが一般的です。

Javaのint型で注意すべき7つの落とし穴

`int`型は便利ですが、使い方を誤ると予期せぬエラーやバグの原因になります。ここでは、プログラミング初心者が特に陥りやすい7つの注意点を、具体的なコード例と共に解説します。

  1. 値の範囲外で起こるオーバーフロー
  2. 割り算での小数点以下の切り捨て
  3. nullを代入できない制約
  4. 型変換(キャスト)の必要性
  5. ゼロによる除算エラー
  6. 「==」と「equals()」の比較の違い
  7. 文字列からの変換エラー

① 値の範囲外で起こるオーバーフロー

`int`型が扱える最大値(約21億)を超えた値を代入しようとすると、「オーバーフロー」が発生し、値が負の最小値にループしてしまいます。

// int型の最大値
int max = 2147483647;

// 最大値に1を足すとオーバーフローが発生
int overflow = max + 1;

System.out.println(overflow); // 予期せぬ値になる

実行結果

-2147483648

巨大な数値を扱う可能性がある場合は、`long`型を使いましょう。

② 割り算での小数点以下の切り捨て

`int`型同士の割り算では、計算結果の小数点以下は自動的に切り捨てられます。

int a = 5;
int b = 2;
int result = a / b;

System.out.println(result); // 2.5ではなく2になる

実行結果

2

正確な計算結果が必要な場合は、`double`などの浮動小数点数型を使う必要があります。

③ nullを代入できない制約

`int`はプリミティブ型なので、「値が存在しない」ことを示す`null`を代入できません。コンパイルエラーになります。

// このコードはコンパイルエラーになる
int number = null;

値が存在しない状態を表現したい場合は、`Integer`クラスを使います。

// Integer型ならnullを代入できる
Integer number = null;

④ 型変換(キャスト)の必要性

大きな型(例:`long`)から小さな型(例:`int`)へ値を代入する場合、明示的な「型変換(キャスト)」が必要です。

long longValue = 100L;
// int intValue = longValue; // このままではコンパイルエラー

// (int)と書くことで明示的にキャストする
int intValue = (int) longValue;

ただし、キャスト元の値がキャスト先の型の範囲を超えていると、値が正しく変換されない(値が欠損する)危険があります。

⑤ ゼロによる除算エラー

プログラム中で数値をゼロで割ると、`java.lang.ArithmeticException`という実行時エラーが発生し、プログラムが強制終了します。

int a = 10;
int b = 0;
// ここでArithmeticExceptionが発生する
int result = a / b;

割り算を行う前には、割る数がゼロでないことを`if`文などでチェックする習慣をつけましょう。

⑥ 「==」と「equals()」の比較の違い

`int`型の比較は`==`を使いますが、`Integer`型を比較する際は注意が必要です。
`Integer`の場合、-128から127までの値はキャッシュされているため`==`で正しく比較できますが、範囲外の数値では意図しない結果になることがあります。

`Integer`オブジェクト同士の値を比較する場合は、`equals()`メソッドを使いましょう。

Integer x = 200;
Integer y = 200;

System.out.println(x == y);      // falseになることがある
System.out.println(x.equals(y)); // true

⑦ 文字列からの変換エラー

`Integer.parseInt()`で文字列を数値に変換する際、文字列に数字以外の文字が含まれていると`NumberFormatException`というエラーが発生します。

String str = "123a";
// ここでNumberFormatExceptionが発生する
int number = Integer.parseInt(str);

変換する前に文字列の内容をチェックするか、`try-catch`構文でエラーを捕捉する処理が必要です。

Javaのint型の実践的な使い方を学ぼう

これまでに学んだ知識を元に、実際のプログラムで`int`型がどのように活用されるかを見ていきましょう。配列、メソッド、制御構文といった、プログラミングの核となる部分での使われ方を紹介します。

  • 配列とループ処理での活用
  • メソッドの引数と戻り値での利用
  • 条件分岐や繰り返し処理での役割

配列とループ処理での活用

`int`型の配列を使うと、複数の整数値をまとめて管理できます。
そして、`for`文(ループ処理)と組み合わせることで、配列の各要素に効率的にアクセスできます。

// 5日間のテストの点数を配列で管理
int[] scores = {90, 85, 78, 92, 88};

// 合計点を計算するための変数を準備
int sum = 0;

// forループで配列の全要素にアクセスし、合計を計算する
for (int i = 0; i < scores.length; i++) {
    sum = sum + scores[i];
}

// 合計点を出力
System.out.println("合計点: " + sum);

// 平均点を計算(キャストして正確な値を得る)
double average = (double) sum / scores.length;
System.out.println("平均点: " + average);

実行結果

合計点: 433
平均点: 86.6

メソッドの引数と戻り値での利用

`int`型は、処理を部品化する「メソッド」においても重要な役割を果たします。
メソッドに値を渡す「引数」や、メソッドから結果を受け取る「戻り値」として頻繁に使われます。

public class Main {
    public static void main(String[] args) {
        // 税込価格を計算するメソッドを呼び出す
        int totalPrice = calculateTotalPrice(1000, 10);
        System.out.println("税込価格は " + totalPrice + " 円です。");
    }

    /**
     * 税抜価格と税率から税込価格を計算して返すメソッド
     * @param price 税抜価格 (int)
     * @param taxRate 税率 (%) (int)
     * @return 税込価格 (int)
     */
    public static int calculateTotalPrice(int price, int taxRate) {
        double tax = price * (taxRate / 100.0);
        return price + (int) tax;
    }
}

実行結果

税込価格は 1100 円です。

条件分岐や繰り返し処理での役割

`if`文による条件分岐や、`for`文による繰り返し処理では、`int`型の変数が条件を制御するキーとして活躍します。

// 年齢に応じてメッセージを変える(条件分岐)
int age = 18;
if (age >= 20) {
    System.out.println("成人です。");
} else {
    System.out.println("未成年です。");
}

// "Hello"を5回表示する(繰り返し処理)
for (int i = 0; i < 5; i++) {
    System.out.println((i + 1) + "回目: Hello");
}

実行結果

未成年です。
1回目: Hello
2回目: Hello
3回目: Hello
4回目: Hello
5回目: Hello

まとめ

この記事では、Javaの`int`型について、基本的な役割から`Integer`クラスとの違い、実践的な使い方、そして注意点までを網羅的に解説しました。

`int`型の正しい理解は、Javaプログラミングの基礎を固める上で極めて重要です。
今回学んだ知識を土台として、ぜひ様々なプログラム作成に挑戦してみてください。

今回学んだ要点を振り返りましょう。

  • `int`は整数を扱う高速なプリミティブ型。
  • `Integer`は便利なメソッドを持つラッパークラスで、`null`を扱える。
  • 約21億を超える数を扱う場合は`long`型を使う。
  • オーバーフローやゼロ除算などのエラーに注意が必要。

次のステップとしては、少数を扱う`double`型や、より複雑なデータを扱う「オブジェクト指向」の概念へと学習を進めていくのがおすすめです。

より正確で詳細な情報が必要な場合は、公式ドキュメントを参照するのが最善の方法です。

学習におすすめの書籍

Javaの学習をさらに深めたい方には、体系的に知識を学べる書籍が役立ちます。
特に評価の高い一冊として「スッキリわかるJava入門」シリーズが挙げられます。イラストが豊富で、初心者がつまずきやすい点を丁寧に解説しているため、独学にも最適です。

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ