読者です 読者をやめる 読者になる 読者になる

bekkou68の日記

開発しているサービス, IT技術, 英語など。

equals と == の違い - Diff. of equals & ==

Java

次は、equals と == の違いについてです。

Next is about difference between equals and ==.



equals は、オブジェクトの実体が等しいかを比較します。

equals compares whether entities of object are same or not.



== は、変数の値が同じものかを比較します。

== compares whether value of variable are same or not.







例をあげます。

Now, I'll list instance.



public class EqualsAndEqualOperationTest {



    public static void main(String args[]) {



        {

            /* 擬似プリミティブ型 */

            String primStr1 = "primStr";

            String primStr2 = "primStr";

            System.out.println(primStr1.equals(primStr2)); /* I */

            System.out.println(primStr1 == primStr2); /* II */

        }



        {

            /* オブジェクト */

            String objStr1 = new String("objStr");

            String objStr2 = new String("objStr");

            System.out.println(objStr1.equals(objStr2)); /* III */

            System.out.println(objStr1 == objStr2); /* IV */

        }



        {

            /* 擬似プリミティブ型 + オブジェクト */

            String primStr = "str";

            String objStr = new String("str");

            System.out.println(primStr.equals(objStr)); /* V */

            System.out.println(primStr == objStr); /* VI */

        }



    }



}



I, III: true



equals は、Stringオブジェクトの実体である文字順序が等しいかを比較します。

equals compares that entity of String object; order of characters are same or not.



擬似プリミティブ型同士とオブジェクト同士、どちらの比較においても文字順序は同じなので、true が返るというわけです。

Comparing pseudo-primitive forms among and objects among, we can realize string orders in both of case are same, so it returns true.



擬似プリミティブ型については下記URLをご参照下さい。

Please refer to the following URL about pseudo-primitive form.



http://msugai.fc2web.com/java/String.html







II: true



変数 primStr1 と primStr2 は同じ文字列なので、同じオブジェクト参照IDが入っています。

The variables of primStr1 and primSt2 are same string, so same object reference IDs in them.



それぞれの変数の値が同じなので、== で比較をすると true が返るというわけです。

Each value of variables are same, therefore it returns true by comparing ==.







IV: false



変数 objStr1 と objStr2 は同じ文字列ですが、new 演算子を用いて別インスタンスを生成しているので、違うオブジェクト参照IDが入っています。

The variables of objStr1 and objStr2 are same string, but different object reference IDs in them.  Because we generate another instance by using new operation.



それぞれの変数の値が違うので、== で比較をすると false が返るというわけです。

Because they have different variables each other, it returns false.







同様に考えると、以下のようになりますね。

Samely thinking, we can answer as the following.



V: true

VI: false







奥深いものです。

Deep world.