ホームページ  >  記事  >  Java  >  Java 参照変数の等価性とオブジェクトの等価性

Java 参照変数の等価性とオブジェクトの等価性

巴扎黑
巴扎黑オリジナル
2016-12-02 09:34:461849ブラウズ

「==」および「equals()」メソッドは、オブジェクトが等しいかどうかを判断するために Java でよく使用されます。2 つのオブジェクトが等しいかどうかを判断する方法について説明します。
ヒープ上のすべてのオブジェクトには参照変数があります。参照変数によって参照されるオブジェクトがない場合は、ヒープ上の GC が戻ってきてそのオブジェクトと対話します。
「==」の比較、シンボルの両側がオブジェクトの参照変数である 比較が true を返した場合、「==」は比較するため、シンボルの両側の参照変数が同じオブジェクトを参照していることを意味します。参照変数値内の参照変数であるため、「==」比較は参照比較です。
しかし、2 つの異なるオブジェクトが意味が同じかどうかを比較する場合はどうなるでしょうか?たとえば、2 つの Student オブジェクトのインスタンス変数名と性別が同じであると考えられますか?
equals() メソッド
これには、equals() メソッドを使用する必要があります。まず、知っておく必要があるのは、equals() メソッドがすべてのクラスの親クラスである Object で定義されていることです。 Object の等しい比較メソッドは「==」と似ており、比較される 2 つのオブジェクトが同じオブジェクトである場合にのみ true を返し、それ以外の場合は false を返します。したがって、クラス内のequals()メソッドをオーバーライドして、ヒープ上の2つの異なるオブジェクトの意味が同じかどうかを確認します。equals()メソッドをオーバーライドする前に、equalsを呼び出すため、hashcode()メソッドをオーバーライドする必要があります。 () メソッドでは、最初に 2 つのオブジェクトの hashcode() によって返された値を比較します。それらが同じでない場合、hashcode() メソッドをオーバーライドすると、すべてのオブジェクトが同じであると思います。同一のハッシュコード値は、 hashcode() メソッドで結果変数値を宣言することによって取得されます (例:
[code="java"]public int hashCode() {
int result=17;
result= 31*結果+名前!=null?名前.hashCode():0;
結果=31*結果+地域!=null?地域.hashCode():0;
結果=31*結果+位置!=null?位置.hashCode():0 ; U Return Result;
}
その後、Equals() メソッドに戻り、2 つのオブジェクトのインスタンス変数が同じかどうかを判断します。各クラスのインスタンス変数は異なるため、インスタンス変数はすべてデフォルト値を持つため、新しく作成された 2 つの異なる型も等しくなります。同じデフォルト値を持ちます)。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。