「equals()メソッドって出てきたけど、いつ使うの?どう使うの?」
「比較演算子の” == ”と何が違うの?」
という方に向けて、equals()メソッドの使い方、比較演算子「==」との違いを解説します。
equals()メソッドの使い方
equals()メソッドの構文は以下の通りです。
A.equals(B)
AとBが等しいか比較し、等しければtrueを、等しくなければfalseを返します。
(A、Bはオブジェクトです。)
実際には、if文などの条件分岐に使用することが多いです。
以下が具体例です。
class Test{
String message1 = "おはよう";
String message2 = "こんにちは";
if(message1.equals(message2)){
System.out.println("同じメッセージだよ");
}else{
System.out.println("違うメッセージだよ");
}
}
ここで、5行目に注目してください。
equals()メソッドは、値が等しければtrueを返し、等しくなければfalseを返します。
そのため、if文の条件にequals()メソッドを書くだけで、等しければifブロック内に入り、等しくなければelseブロック内に入ります。
比較演算子「==」とequals()メソッドの違い
等しいかどうかの比較 といえば、真っ先に比較演算子の「==」が思い浮かびますよね。
比較演算子「==」とequals()メソッドの違いは、比較するオブジェクトの違いにあります。
比較演算子「==」はプリミティブ型オブジェクトの比較に使います。
一方、equals()メソッドは、参照型オブジェクトの比較に使います。
オブジェクトにはプリミティブ型と参照型存在し、プリミティブ型は値そのものが変数に代入され、参照型は値の保存先アドレスが代入されています。
プリミティブ型には、intやbooleanなどが、参照型にはStringやインスタンス化したオブジェクトなどがあります。
プリミティブ型と参照型について詳しく知りたい方は、以下の記事を参考にしてください。
実際に具体例を見てみましょう。
このプログラムでは、「こんにちは」という文字列の入ったString型のオブジェクトを比較しています。
コードは読み飛ばしても良いので、実行結果に注目してください。
public class Test {
public static void main(String[] args) {
String message1 = "こんにちは";
String text1 = "こんに";
String text2 = "ちは";
String message2 = text1 + text2;
//「==」を使った比較
System.out.println("-----比較演算子「==」を使った比較-----");
//message1とmessage2の比較
if(message1 == message2) {
System.out.println("「" + message1 + "」" + "と「" + message2 + "」は同じだよ");
}else {
System.out.println("「" + message1 + "」" + "と「" + message2 + "」は違うよ");
}
System.out.println();
//equals()メソッドを使った比較
System.out.println("-----equals()メソッドを使った比較-----");
//message1とmessage2の比較
if(message1.equals(message2)) {
System.out.println("「" + message1 + "」" + "と「" + message2 + "」は同じだよ");
}else {
System.out.println("「" + message1 + "」" + "と「" + message2 + "」は違うよ");
}
}
}
以下が実行結果です。
比較演算子「==」で比較すると、同じ「こんにちは」でも異なるものだと判定されます。
一方、equals()メソッドを用いた比較では、同じだと判定されています。
どうしてこのような結果になるのでしょう?
比較演算子「==」ではオブジェクトの中身を比較します。
参照型のオブジェクトの中身は、あくまで「こんにちは」という文字列が保存されている場所の情報であり、文字列の保存場所はmessage1とmessage2では異なります。
そのため、文字列の内容が同じでも、保存場所が異なるため、2つのオブジェクトは異なると判定されてしまったのです。
保存場所の情報を比較したい時には、「==」を使っても問題ありません。
しかし、内容が等しいか比較する時は、equals()メソッドを使いましょう。
まとめ
equals()メソッドの書き方
A.equals(B); //戻り値はtrueかfalse
比較演算子「==」との違い
・比較演算子「==」はプリミティブ型オブジェクトの比較
・equals()メソッドは参照型オブジェクトの比較
コメント