どーも、ふぎとです。
今回はちょっとした備忘録。
==演算子と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メソッドは同一性及び同値性を判定する
・同一性の判定とは「同じインスタンスかどうか」
・同値性の判定とは「インスタンスに格納されて
いる値が同じかどうか」