0
0

More than 3 years have passed since last update.

==演算子とeqalsメソッドの違い

Posted at

どーも、ふぎとです。

今回はちょっとした備忘録。

==演算子とequalsメソッドとはどう違うのか?

結論を言うと、

==演算子は同一性を判定し、
equalsメソッドは同一性及び同値性を判定する

という違いがあるそう。

「同一性の判定」とは

「同じインスタンスであるか否か」ということ。

「同値性の判定」とは

「インスタンスに格納されている値が同じであ
るか否か」ということ。

例を以下に示します。

サンプルプログラム

public class Example{
    public static void main(String[] args){
        String s1 = "012";
        String s2 = new StringBuilder("012").toString();

        if(s1 == s2){
            System.out.println("true");
        }else{
            System.out.println("false");
        }

        if(s1.equals(s2)){
            System.out.println("true");
        }else{
            System.out.println("false");
        }
    }
}

 "s1 == s2"は、「s1とs2は同一のインスタンスであるかどうか」が
判定されます。上のプログラムにおいて、s1とs2はそれぞれ独立した
インスタンスとして作成されています。したがって同じインスタンス
とは言えないので、falseが返ってきます。ちなみに、以下のように
書き換えるとs1==s2はtrueとなります。

String s1 = "012";
String s2 = s1;

 一方、equalsメソッドは、最初にメソッド内で==演算子による同一
性の判定を行った後、同値性の判定を行います。ここで、s1とs2には
同じ"012"という文字列リテラルが格納されている
ので、s1.equals(s2)
となります。

まとめ

・==演算子は同一性を判定する
・equalsメソッドは同一性及び同値性を判定する
・同一性の判定とは「同じインスタンスかどうか
・同値性の判定とは「インスタンスに格納されて
 いる値が同じかどうか

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0