この記事では、java に関する関連知識を提供します。主に、オブジェクト クラスとは何か、オブジェクト クラスの equals メソッドと hashCode メソッドなど、オブジェクト クラスに関する関連問題を紹介します。以下の内容が皆様のお役に立てれば幸いです。
推奨学習: 「java ビデオ チュートリアル 」
Object は、Java クラス ライブラリの特別なクラスであり、すべてのクラスの親クラスです。
言い換えると、Java では、任意のタイプのオブジェクトを Object タイプの変数に割り当てることができます。
Object クラスを除いて、Java のすべてのクラスには継承関係があります。
オブジェクト クラスは java.lang パッケージにあり、コンパイル中に自動的にインポートされます。クラスを定義するときに、継承された親クラスが指定されていない場合、デフォルトの親クラスは Object クラスです。
#オブジェクト クラスのメソッドを見てみましょう
## この記事では、hashCode()、equals()
以下のこのコード部分を見てください。
class Person {} class Student {} public class Test03 { public static void func(Object o) { } public static void main(String[] args) { func(new Person()); func(new Student()); } public static void main1(String[] args) { Object o = new Person(); Object o2 = new Student(); } }
このように直接比較してアドレスが同じかどうかを確認すると false が出力され、出力が間違っています
それで比較したいのですが、方法はありますか
Java では、提供されるメソッドは等しいです。これは、2 つのオブジェクトが同じかどうかを比較するために使用できます。
class Person { public String dz; public Person(String dz) { this.dz = dz; } @Override public String toString() { return "Person{" + "dz='" + dz + '\'' + '}'; } } class Student { } public class Test03 { public static void main(String[] args) { Person person = new Person("beijing"); Person person1 = new Person("beijing"); System.out.println(person == person1); }
これを main に直接書いた場合でも、 false になります。
#これは、等しいものが存在しないためです。デフォルトはオブジェクトから継承されます。
比較は依然として this と obj であることがわかります。これらは現在渡されているパラメータであるため、 false です。
それでは、比較に等号を使用する方法
次に、比較する前に等号を書き直す必要があります
System.out.println(person.equals(person1));
文字列を使用できます書き換えを支援するため、等しいものを書く
現時点では等しいものを比較できます
コンテンツ比較オブジェクト内でそれらが同じである場合、equals
HashCode を使用すると、特定のオブジェクトの場所 (メモリ アドレス) を呼び出し、Integer.toHexString() メソッドを呼び出して、このアドレスを 16 進数で出力します。
、
この 2 つは、 dz が同じで、直接使用する hashCode がメモリ アドレスを計算し、メモリ アドレスが異なることがコードでわかります。
これは、このように hashCode を直接入力することはできないことを意味します。 「ハッシュコードを書き換える」
の下にあるハッシュコード@Override public boolean equals(Object obj) { //判断当前obj参数是否为null if (obj == null) { return false; } if (this == obj) { return true; } //不是Person类对象 if (!(obj instanceof Person)) { return false; } Person ret = (Person) obj; return this.dz.equals(ret.dz); }ログイン後にコピー
を再実装する必要があります。その後、コードを実行してみてください。案の定、書き換え後のメモリ アドレスは次のようになります。同じ
## したがって、ハッシュコードは、位置を見つけるためのものです
これは、生成された等号とハッシュコードです
@Override public int hashCode() { return Objects.hash(dz); }
推奨される学習: "
Java ビデオ チュートリアル以上がJava のオブジェクト クラスの知識ポイントの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。