Javaのデータ型を学ぶと必ず出てくる「プリミティブ型」と「参照型」。この2つの違いを理解することは、Javaプログラミングの基礎を固める上でとても重要です。この記事では、Javaプリミティブ型の一覧と参照型との違いを、メモリの仕組みを含めて初心者向けにわかりやすく解説します。


プリミティブ型とは?
プリミティブ型(Primitive Type)は、Javaに最初から用意されている基本データ型です。「原始的」という意味の名前の通り、最もシンプルなデータ型で、値そのものを直接変数に格納するという特徴があります。

プリミティブ型の特徴
プリミティブ型の特徴
- 全部で8種類のみ(Javaで定義済み)
- 値そのものを変数に直接格納する
- 小文字で始まる(int, double, boolean など)
- メソッドを持たない(シンプルなデータ)
- nullを代入できない
プリミティブ型一覧(全8種類)
Javaのプリミティブ型は8種類あり、用途によって分類されています。
整数型(4種類)
| 型名 | サイズ | 最小値 | 最大値 |
|---|---|---|---|
| byte | 8ビット(1バイト) | -128 | 127 |
| short | 16ビット(2バイト) | -32,768 | 32,767 |
| int | 32ビット(4バイト) | 約-21億 | 約21億 |
| long | 64ビット(8バイト) | 約-922京 | 約922京 |
intが最もよく使われます!
// 整数型の例
byte b = 100;
short s = 30000;
int i = 2000000000;
long l = 9000000000L; // Lを付ける
浮動小数点型(2種類)
| 型名 | サイズ | 精度 | 用途 |
|---|---|---|---|
| float | 32ビット(4バイト) | 約7桁 | メモリ節約時 |
| double | 64ビット(8バイト) | 約15桁 | 通常の小数計算 |
doubleが最もよく使われます!
// 浮動小数点型の例
float f = 3.14f; // fを付ける
double d = 3.141592653589793;
文字型(1種類)
| 型名 | サイズ | 格納できる値 | 表記 |
|---|---|---|---|
| char | 16ビット(2バイト) | 1文字(Unicode) | シングルクォーテーション |
// 文字型の例
char c1 = 'A';
char c2 = 'あ';
char c3 = '\u0041'; // Unicodeで'A'
論理型(1種類)
| 型名 | サイズ | 格納できる値 | 用途 |
|---|---|---|---|
| boolean | 1ビット | true / false | 条件分岐 |
// 論理型の例
boolean isJavaFun = true;
boolean isRaining = false;
参照型とは?
参照型(Reference Type)は、プリミティブ型以外のすべてのデータ型です。値そのものではなく、データが格納されているメモリ上の「場所(アドレス)」を保存するという特徴があります。
参照型の特徴
参照型の特徴
- プリミティブ型以外のすべての型(無限にある)
- データの場所(参照)を変数に格納する
- 大文字で始まる(String, Integer, ArrayList など)
- メソッドを持つ(機能が豊富)
- nullを代入できる
代表的な参照型
// 参照型の例
String name = "山田太郎"; // 文字列
Integer number = 100; // Integerラッパークラス
int[] scores = {80, 90, 100}; // 配列
ArrayList<String> list = new ArrayList<>(); // リスト


プリミティブ型と参照型の違い
2つの型の違いを様々な観点から比較してみましょう。
比較表
| 項目 | プリミティブ型 | 参照型 |
|---|---|---|
| 種類 | 8種類のみ | 無限(自作も可能) |
| 格納するもの | 値そのもの | 参照(アドレス) |
| nullの代入 | 不可 | 可能 |
| メソッド | なし | あり |
| 名前の規則 | 小文字で始まる | 大文字で始まる |
| デフォルト値 | 0, 0.0, false など | null |
メモリの違いを図解で理解
プリミティブ型と参照型では、メモリへの格納方法が異なります。
プリミティブ型のメモリイメージ
int age = 25;
┌─────────────────┐
│ 変数: age │
│ 値: 25 │ ← 値そのものが入っている
└─────────────────┘
参照型のメモリイメージ
String name = "山田";
┌─────────────────┐ ┌─────────────────┐
│ 変数: name │ ──→ │ 実際のデータ │
│ 参照: @100 │ │ "山田" │
└─────────────────┘ └─────────────────┘
スタック領域 ヒープ領域
値のコピーの違い
この違いは、変数を別の変数にコピーしたときに顕著に現れます。
プリミティブ型のコピー
public class PrimitiveCopy {
public static void main(String[] args) {
int a = 10;
int b = a; // 値がコピーされる
b = 20; // bを変更
System.out.println("a = " + a); // a = 10(変わらない)
System.out.println("b = " + b); // b = 20
}
}
実行結果:
a = 10
b = 20
プリミティブ型では、値そのものがコピーされるため、bを変更してもaは影響を受けません。
参照型のコピー
public class ReferenceCopy {
public static void main(String[] args) {
int[] arrayA = {1, 2, 3};
int[] arrayB = arrayA; // 参照がコピーされる
arrayB[0] = 100; // arrayBの要素を変更
System.out.println("arrayA[0] = " + arrayA[0]); // 100(変わる!)
System.out.println("arrayB[0] = " + arrayB[0]); // 100
}
}
実行結果:
arrayA[0] = 100
arrayB[0] = 100


重要ポイント
参照型の変数をコピーすると、同じデータを指す変数が2つできます。片方を変更すると、もう片方にも影響します。これは初心者がよく混乱するポイントです!
ラッパークラス:プリミティブ型を参照型として使う
プリミティブ型には、それぞれ対応するラッパークラス(参照型)があります。
| プリミティブ型 | ラッパークラス |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
ラッパークラスの使い方
// プリミティブ型
int primitiveInt = 100;
// ラッパークラス
Integer wrapperInt = 100; // オートボクシング
// ラッパークラスのメソッドを使う
String str = wrapperInt.toString(); // "100"
int parsed = Integer.parseInt("200"); // 文字列→数値変換
いつラッパークラスを使う?
ラッパークラスを使う場面
- コレクション(ArrayList等)に格納するとき
- nullを許容したいとき
- メソッド(parseInt等)を使いたいとき
プリミティブ型を使う場面
- 単純な計算や比較
- パフォーマンスを重視するとき
- 基本的にはこちらを優先
よくある間違いと対処法
間違い①: プリミティブ型にnullを代入
int number = null;
// エラー: プリミティブ型にnullは代入できない
Integer number = null;
// ラッパークラスならnullを代入可能
間違い②: 参照型の比較に==を使う
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);
// false(参照が異なる)
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1.equals(s2));
// true(値が同じ)

まとめ
この記事では、Javaプリミティブ型と参照型の違いについて解説しました。
この記事のポイント
- プリミティブ型は8種類で、値そのものを格納する
- 参照型はデータの場所(参照)を格納する
- プリミティブ型は小文字、参照型は大文字で始まる
- プリミティブ型はnullを代入できない
- 参照型のコピーは同じデータを指すので注意
- 各プリミティブ型には対応するラッパークラスがある


プリミティブ型と参照型の違いを理解することで、Javaプログラミングの基礎がしっかり身につきます。特に参照型の「コピーの挙動」は重要なので、サンプルコードを実行して体験してみてください!


