ホームページ  >  記事  >  Java  >  Java のオブジェクト クラスの知識ポイントの概要

Java のオブジェクト クラスの知識ポイントの概要

WBOY
WBOY転載
2022-06-16 11:57:431407ブラウズ

この記事では、java に関する関連知識を提供します。主に、オブジェクト クラスとは何か、オブジェクト クラスの equals メソッドと hashCode メソッドなど、オブジェクト クラスに関する関連問題を紹介します。以下の内容が皆様のお役に立てれば幸いです。

Java のオブジェクト クラスの知識ポイントの概要

推奨学習: 「java ビデオ チュートリアル

1. オブジェクト クラスとは何ですか?

Object は、Java クラス ライブラリの特別なクラスであり、すべてのクラスの親クラスです。

言い換えると、Java では、任意のタイプのオブジェクトを Object タイプの変数に割り当てることができます。

Object クラスを除いて、Java のすべてのクラスには継承関係があります。

オブジェクト クラスは java.lang パッケージにあり、コンパイル中に自動的にインポートされます。クラスを定義するときに、継承された親クラスが指定されていない場合、デフォルトの親クラスは Object クラスです。

#オブジェクト クラスのメソッドを見てみましょう

## この記事では、hashCode()、equals()

2 について簡単に紹介します。オブジェクト クラスの 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


3 をオーバーライドする必要があります。Object クラスの hashCode メソッド

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);
    }
の下にあるハッシュコード

を再実装する必要があります。その後、コードを実行してみてください。案の定、書き換え後のメモリ アドレスは次のようになります。同じ

## したがって、ハッシュコードは、位置を見つけるためのものです


#4. コンパイラは、equals と hashCode## を自動的に生成します。

#一般に、書き換える場合、これら 2 つは同時に書き換えられます

これは、生成された等号とハッシュコードです

    @Override
    public int hashCode() {
        return Objects.hash(dz);
    }

推奨される学習: "

Java ビデオ チュートリアル

"

以上がJava のオブジェクト クラスの知識ポイントの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。