✅【保存版】Java面接対策:よく聞かれる質問と回答まとめ
勉強ちゃん
いろいろ勉強
Javaの面接で非常によく聞かれる質問の1つがこれです。
「
==とequals()の違いを説明してください」
曖昧なまま答えてしまうと、「Javaのオブジェクトの基本を理解していない」と評価されてしまう可能性があります。
今回は、違いを明確に整理し、面接で自信を持って説明できるようになることを目指します。
| 比較方法 | 比較対象 | 用途 |
|---|---|---|
== | 参照(アドレス) | 同じオブジェクトかどうかを比較 |
equals() | 中身(値) | 同じ内容かどうかを比較 |
String a = new String("hello");
String b = new String("hello");
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
a == b は 「aとbが同じオブジェクトか」 を見ており、これはfalse。a.equals(b) は 「aとbの中身(文字列)が同じか」 を見ており、これはtrue。== は「参照先のアドレス」を比較Javaでは、オブジェクトを変数に代入すると「そのオブジェクトの参照(アドレス)」が保持されます。
そのため、== は「同じオブジェクトか(同じ参照か)」を調べます。
equals() は「中身の比較」Objectクラスに定義されている equals() は、元々 == と同じ動作をしますが、
多くのクラス(例:String, Listなど)はこのメソッドをオーバーライドして、中身の比較を行うようになっています。
equals() を使うときは nullチェックを忘れずに!String a = null;
if ("test".equals(a)) { // 安全(逆に書く)
...
}
a.equals("test") のように書くと a が null の場合 NullPointerException が発生します。
自分で作ったクラスも、equals()を正しく動かすにはオーバーライドが必要です。
public class Person {
String name;
public Person(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person other = (Person) obj;
return Objects.equals(this.name, other.name);
}
}
「
==は参照(アドレス)の比較で、equals()は中身の比較です。例えばStringでは、==だとfalseでもequals()はtrueになることがあります。また、自作クラスで中身を比較したい場合は、equals()をオーバーライドする必要があります。」
==:同一オブジェクト(参照)の比較equals():中身(値)の比較equals() をオーバーライド済み"test".equals(obj) のように書くと安全🎯 Java面接の基本中の基本なので、コードと一緒に覚えましょう!