0

パブリック クラス EqualsTest {

public static void main(String[] args) {

    String s1 = "abc";
    String s2 = s1;
    String s5 = "abc";
    String s3 = new String("abc");
    String s4 = new String("abc");
    System.out.println("== comparison : " + (s1 == s5));
    System.out.println("== comparison : " + (s1 == s2));
    System.out.println("Using equals method : " + s1.equals(s2));
    System.out.println("== comparison : " + s3 == s4);
    System.out.println("Using equals method : " + s3.equals(s4));
}

}

出力:

== comparison : true
== comparison : true
Using equals method : true
false
Using equals method : true

上記で s3==s4 の出力がどのように false になったか、また、これがどのように等しいタグ操作なのか、誰でも説明できますか?

4

3 に答える 3

0

「==」演算子はメモリの場所を比較します (これらの変数名は両方とも同じインスタンスを指していますか)、「.equals()」は値を比較します (個別のコピーであっても、同じ内容を共有していますか?)

于 2013-07-28T06:45:07.173 に答える
0

私が間違っていなければ、== 演算子は、s3 と s4 がそのように定義されている場合にオブジェクトを比較します。オブジェクトは同じではない (同じアドレスまたはメモリ位置を持っていない; 参照と呼ばれることが多い) ため、演算子は false を返します。== 演算子は、プリミティブ文字列を比較しているため、他の例で機能します。これが (少なくとも私の経験では) == が適切な選択ではない理由であり、オブジェクト自体ではなく文字列を比較していることを確認するために、常に .equals を使用する必要があります。

于 2013-07-28T06:45:21.503 に答える
0

明らかに、s3 と s4 は値に等しいが、オブジェクトに関してはそうではありません。s3==s4メモリ位置の比較であるため、そうではありません。

==Java で と equals()の違いを学ぶことができます。

「<コード>==」演算子

Java では、「==」演算子を使用して 2 つのオブジェクトを比較すると、オブジェクトがメモリ内の同じ場所を参照しているかどうかがチェックされます。つまり、2 つのオブジェクト名が基本的に同じメモリ位置への参照であるかどうかを確認します。

equals() メソッド

equals メソッドは Object クラスで定義され、すべてのクラスが直接または間接の子孫になります。デフォルトでは、equals() メソッドは実際には「==」演算子と同じように動作します。つまり、両方のオブジェクトがメモリ内の同じ場所を参照しているかどうかを確認します。しかし、equals メソッドは実際には 2 つのオブジェクトの内容を比較するためのものであり、メモリ内の位置を比較するためのものではありません。

于 2013-07-28T06:45:31.520 に答える