初心者向けに「配列の比較」について、例を交えてわかりやすく解説します。順番に理解できるように、手を動かしながら学べる内容にしています。
1. 配列の「==」は使えない
Javaでは、変数に == を使うと、値が同じかではなく「同じものを指しているか」 を調べます。
int[] a = {85, 78, 92};
int[] b = {85, 78, 92};
System.out.println(a == b); // false
Java- ここで
falseになるのは、a と b は同じ中身でも別の配列だからです。 - 「中身が同じかどうか」を知りたい場合は別の方法を使う必要があります。
2. 1次元配列の比較:Arrays.equals
Javaには便利な Arrays.equals メソッドがあります。これを使うと、配列の中身を1つずつ比べて同じかどうか を調べられます。
import java.util.Arrays;
public class ArrayCompareExample {
public static void main(String[] args) {
int[] a = {85, 78, 92};
int[] b = {85, 78, 92};
int[] c = {85, 92, 78};
System.out.println(Arrays.equals(a, b)); // true
System.out.println(Arrays.equals(a, c)); // false
}
}
Java- a と b は順番も要素も同じ →
true - a と c は順番が違う →
false
ポイント:1次元配列は
Arrays.equalsで十分!
3. 2次元以上の配列の比較:Arrays.deepEquals
2次元配列(配列の中に配列がある場合)は、Arrays.equals では正しく比較できません。
import java.util.Arrays;
public class ArrayDeepCompareExample {
public static void main(String[] args) {
int[][] a = {{85, 78}, {92, 58}};
int[][] b = {{85, 78}, {92, 58}};
System.out.println(Arrays.equals(a, b)); // false
System.out.println(Arrays.deepEquals(a, b)); // true
}
}
JavaArrays.equals(a, b)→ false になる理由:- a と b の要素は「配列」なので、
equalsでは中身を見ずに参照(同じオブジェクトかどうか)を比べるだけ。
- a と b の要素は「配列」なので、
Arrays.deepEquals(a, b)→ true になる理由:- 配列の中の配列まで再帰的に比べてくれるので、中身が全て同じなら true。
4. 練習問題(手を動かして理解)
問題1
次の配列 x と y は同じか、プログラムで確認してみましょう。
int[] x = {10, 20, 30};
int[] y = {10, 20, 30};
Java問題2
次の2次元配列 m1 と m2 は同じか、deepEquals を使って確認しましょう。
int[][] m1 = {{1,2},{3,4}};
int[][] m2 = {{1,2},{3,4}};
Javaヒント
- 1次元配列 →
Arrays.equals(x, y) - 2次元配列 →
Arrays.deepEquals(m1, m2)
まとめ
| 比較方法 | 使う場面 | 結果の意味 |
|---|---|---|
== | 配列が「同じオブジェクトか」確認したいとき | 参照が同じなら true、違うなら false |
Arrays.equals(a, b) | 1次元配列の中身を比べたいとき | 中身が全て同じなら true |
Arrays.deepEquals(a, b) | 多次元配列の中身まで比べたいとき | 中身が全て同じなら true |
- 初心者はまず 1次元配列なら
Arrays.equals、多次元ならArrays.deepEqualsを覚えると迷わないです。
💡 ちょっと応用
文字列配列やオブジェクト配列でも同じです。ただしオブジェクト配列の場合は、そのオブジェクトの equals() が正しく実装されていることが前提です。
