ホームページ  >  記事  >  Java  >  Javaのequalsメソッドとは何ですか?

Javaのequalsメソッドとは何ですか?

藏色散人
藏色散人オリジナル
2023-03-10 10:58:0718188ブラウズ

java の等しいメソッドはオブジェクト クラスのメソッドであり、参照型を決定するためにのみ使用できます。デフォルトでは、等しいメソッドはアドレスが等しいかどうかを決定します。このメソッドは、多くの場合、サブクラスでオーバーライドされ、アドレスが等しいかどうかを決定します。使用構文は「public booleanquals(Object obj) {return (this == obj);}」のようになります。

Javaのequalsメソッドとは何ですか?

#このチュートリアルの動作環境: Windows 10 システム、Java8、Dell G3 コンピューター。

equals メソッド in Java

1. "== 演算子

"== は比較演算子。
  • "== は、基本型と参照型の両方を決定で​​きます。
  • "=="基本型を判定すると、値が等しいかどうかで判定します。例: int i=10; double d=10.0
  • "=="参照型を決定すると、アドレスが等しいかどうか、つまり同じオブジェクトであるかどうかが決まります。

2. Equals メソッド
  • equals はオブジェクト クラスのメソッドであり、参照型
  • を決定するためにのみ使用できます。
  • equals メソッドは、デフォルトでアドレスが等しいかどうかを決定します。このメソッドは、内容が等しいかどうかを決定するためにサブクラスでオーバーライドされることがよくあります。たとえば、String クラスと Integer クラスのソース コードは等しいです。

Object クラスの equals メソッドのソース コード:

Object クラスの equals メソッドは、デフォルトでオブジェクト アドレスが同じかどうかを比較します。

    public boolean equals(Object obj) {
        return (this == obj);
    }
"hello".equals("abc");
説明: これは現在のオブジェクトを指します。これは、equals メソッドを呼び出した人を指します。上記の hello は、equals を呼び出します。つまり、これは、文字列 hello と、== の右側にある obj オブジェクトを指します。 、受信 abc です。

3.equals メソッドを書き直す演習

#演習 1:

package object;
/*
判断两个person对象的内容是否相等
如果两个person对象的各个属性值都一样,则返回true,反之返回false
 */
public class EqualsExercise {
    public static void main(String[] args) {
        Person person1 = new Person("jack", 10, '男');
        Person person2 = new Person("jack", 10, '男');
        System.out.println(person1.equals(person2));   //输出结果是true
    }
}

class Person {
    private String name;
    private int age;
    private char gender;

    //重写Object的equals方法
    public boolean equals(Object obj) {
        //如果比较的两个对象是同一个对象,则直接返回true
        if (this == obj){   //this就代表调用equals方法的那个对象,obj就是方法里面的实参
            return true;
        }
        //类型判断
        if (obj instanceof Person){  //obj是Person,我们才比较
            //进行 向下转型(即obj转成Person); 因为我需要得到obj的各个属性,如果不转型,拿不到
            Person p = (Person) obj;
            return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;
        }
        //如果不是person,则直接返回false;总不能拿一个人跟一个狗比
        return false;
    }


    public Person(String name, int age, char gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }
}

ヒント:

Instanceof の使用法: result = object instanceof class

Instanceof には、左側にオブジェクト、右側にクラスがあります。オブジェクトがクラスまたはサブクラスによって作成されたオブジェクトである場合、正しい場合は true が返され、それ以外の場合は false が返されます。

演習 2:

Javaのequalsメソッドとは何ですか?

説明:

  • sout1: p1と p2 は両方ともオブジェクトであるため、 == はアドレスが同じかどうかを判断します。 false
  • sout2: p1.name と p2.name は両方とも文字列であるため、ここでの等しいものは String クラスのメソッドの等しいものを呼び出します。判定するのは内容が同じかどうかです true
  • sout3: p1もp2もオブジェクトなのでここでのequalsはObjectクラスのequalsメソッドです 判定するのはアドレスが同じかどうかです、 false
  • sout4: s1 と s2 は両方とも String クラスのオブジェクトであるため、ここでの equals は String クラスの equals メソッドを呼び出し、内容が同じであるかどうかを判断します。 true
  • sout5 : s1 と s2 は両方ともオブジェクトであるため、 == はアドレスが同じであるかどうかを判断します。 false

演習 3:

Javaのequalsメソッドとは何ですか?

説明:

  • sout1: 65 と 65.0 は等しい、true
  • sout2: 文字の本質は依然として数値です。AscII テーブルを確認してください。 A は 12、真です
  • sout3: 何も言うことはありません
  • sout4: 何も言うことはありません
  • sout5: 何も言うことはありません
  • sout6: 同じタイプではありません、 == 直接コンパイル エラー

関連する推奨事項: 「Java ビデオ チュートリアル

以上がJavaのequalsメソッドとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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