JAvaのequalsと==
2885 ワード
次は私が他の人のブログとjava APIを見てまとめたものです.
まず、一つの概念を明確にしなければなりません.
==の使い方==メモリ内のオブジェクトのアドレスが等しいかどうかを比較します.2つの変数を比較すると、2つの変数の値が等しいかどうかが比較され、2つの参照型変数を比較すると、オブジェクトが格納しているアドレスが同じかどうか、すなわちスタック内の内容が同じかどうかが比較されます(オブジェクトはスタックに格納され、オブジェクトの参照はスタックに格納されています).
equalsの用法equalsはオブジェクト間の内容が同じかどうかを比較する.
まずjavaのObject抽象クラスのequals()メソッドの定義を見てみましょう.
public boolean equals(Object obj) { return (this == obj); }
これは、入力されたオブジェクトを==比較し、参照タイプであるため、アドレスを比較します.したがって、Objectクラスのequalsは、2つのオブジェクトのアプリケーションアドレスが同じかどうかを比較する(後述するStringタイプのequals()メソッドは、equals()メソッドが書き換えられているため、そうではありません!)
Stringクラスのequals()メソッドの定義を見てみましょう.
したがってStringのequals()メソッドは、現在の文字列と送信された文字列が同じかどうかを比較することです.
まず、一つの概念を明確にしなければなりません.
==の使い方==メモリ内のオブジェクトのアドレスが等しいかどうかを比較します.2つの変数を比較すると、2つの変数の値が等しいかどうかが比較され、2つの参照型変数を比較すると、オブジェクトが格納しているアドレスが同じかどうか、すなわちスタック内の内容が同じかどうかが比較されます(オブジェクトはスタックに格納され、オブジェクトの参照はスタックに格納されています).
equalsの用法equalsはオブジェクト間の内容が同じかどうかを比較する.
まずjavaのObject抽象クラスのequals()メソッドの定義を見てみましょう.
public boolean equals(Object obj) { return (this == obj); }
これは、入力されたオブジェクトを==比較し、参照タイプであるため、アドレスを比較します.したがって、Objectクラスのequalsは、2つのオブジェクトのアプリケーションアドレスが同じかどうかを比較する(後述するStringタイプのequals()メソッドは、equals()メソッドが書き換えられているため、そうではありません!)
Stringクラスのequals()メソッドの定義を見てみましょう.
public boolean equals(Object anObject) {
if (this == anObject) { //
return true;
}
if (anObject instanceof String) { //
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
したがってStringのequals()メソッドは、現在の文字列と送信された文字列が同じかどうかを比較することです.