1

== は比較される参照が同じかどうかをチェックし、.equals() は 2 つの状態を比較することを学びました。では、なぜ .equals() メソッド内で == を使用できるのでしょうか?

たとえば、次のようにします。

public boolean equals(Object o){
        //cast o to SimpleBankAccount
        SimpleBankAccount b = (SimpleBankAccount)o;

        //check if all attributes are the same
        if ((this.balance == b.balance) && (this.accountNumber == b.accountNumber)){
            return true;
        }
        else{
            return false;
        }
    }

this.balance と b.balance が同じ参照を持つのはなぜですか?

4

7 に答える 7

2

equals メソッドは、オブジェクトを比較することです。「==」を使用して等しいかどうかをテストする場合、期待どおりに機能するのは、プリミティブ型またはネイティブ型を比較す​​るとき、または 2 つのポインターが同じオブジェクトを参照しているかどうかを実際にテストするときだけです。つまり、タイプ、またはであるbalance可能性が高く、これは、「==」が期待どおりに等しいかどうかをテストすることを意味します。タイプが の場合、これは機能しません。intfloatdoublebalanceBalance

于 2013-03-04T18:32:38.007 に答える
2

参照は、int、chars、および double とともにプリミティブ型にも似ています。つまり、== を実行すると、これらの型のバイナリ表現を文字通り比較することになります。

于 2013-03-04T18:34:55.497 に答える
1

バランスはプリミティブである可能性が高いからですよね?intまたはfloatのような?つまり、バランスの値を比較しています。オブジェクトでは参照を比較していますが、プリミティブでは実際のデータ値を比較しています

于 2013-03-04T18:31:49.757 に答える
0

このequalsメソッドが機能する場合、それはbalanceおよびaccountNumber変数がintまたはなどのプリミティブ型doubleであり==、プリミティブ型の値を比較するためです。

于 2013-03-04T18:31:36.530 に答える
0

どんなバランスかによる。

balanceがプリミティブの場合==、正しい値を比較します。

于 2013-03-04T18:31:52.893 に答える
0

==通常、equals メソッド内で使用され、2 つの参照が実際に同じオブジェクトであるかどうかを確認します。そうでない場合は、オブジェクトが同じ状態であるかどうかをさらにチェックします。

于 2013-03-04T18:32:16.337 に答える
0

balance/accountNumber の値を比較したい場合、それらがプリミティブまたはプリミティブ ラッパー (Integer など) である場合は、== で値を比較します。ラッパーは自動ボックス化されます。

于 2013-03-04T18:39:59.867 に答える