ホームページ  >  記事  >  Java  >  Javaでの==とequalsの使用の違いは何ですか

Javaでの==とequalsの使用の違いは何ですか

PHPz
PHPz転載
2023-05-15 09:25:112433ブラウズ

1, == 分析

== 同じ基本データ型間の比較によく使用され、同じ型のオブジェクト間の比較にも使用できます。

  • == が基本データ型を比較している場合、比較は 2 つの基本データ型の値が等しいかどうかです。

  • == が比較される 2 つのオブジェクトである場合、比較されるのは 2 つのオブジェクトの参照であり、2 つのオブジェクトの参照が等しいかどうかを比較することになります。 ;

2. Equals メソッド解析

equals メソッドが主に使用されます。 2 つのオブジェクト間で、あるオブジェクトが別のオブジェクトと等しいかどうかを検出します。

オブジェクト クラス

public boolean equals(Object obj) {
     return (this == obj);
 }
equals

メソッドのソース コードを見てみましょう。このメソッドの機能は、2 つのオブジェクトが等しいかどうかを判断することでもあります。 2 つの使用状況:

状況 1: オブジェクトの

equals メソッドがオーバーライドされていない場合、equals が呼び出されるときに、2 つの参照が一致するかどうかを比較します。オブジェクトが等しい、つまり、オブジェクトが同じメモリ領域を指しているかどうかです。このとき、== 2 つのオブジェクトを比較することと等価です。

犬のクラス

package com.xiao;

/**
 * @author :小肖
 * @date :Created in 2022/3/11 14:42
 */
public class Dog {

    private String name;

    private Integer age;


    public Dog() {
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

テストクラス

import com.xiao.Dog;

public class Test {

    public static void main(String[] args) {
        Dog dog = new Dog("小旺",2);
        Dog dog1 = new Dog("小旺",2);
        System.out.println(dog.equals(dog1));
    }
}

テスト結果

false

ケース 2: オブジェクト

equals メソッドがオーバーライドされました。一般に、書き直された equals メソッドは、2 つのオブジェクトの内容が等しいかどうかを比較します。等しい場合は true を返し、そうでない場合は false を返します。

Dog class

package com.xiao;

/**
 * @author :小肖
 * @date :Created in 2022/3/11 14:42
 */
public class Dog {

    private String name;

    private Integer age;


    public Dog() {
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }


    @Override
    public boolean equals(Object obj) {
        if(obj.getClass() != getClass()){
            return false;
        }
        Dog dog = (Dog) obj;
        if(dog.getAge() == age && dog.getName().equals(name)){
            return true;
        }
        return false;
    }
}

テスト結果

テストクラスのコードは上記と同じです

true

3 、equals メソッドには次の特性があります。

  • 再帰性: null ではない参照値 x の場合、x.equals(x) は true でなければなりません。

  • 対称性: null 以外の参照値 x および y については、x.equals(y) が true の場合に限り、y.equals(x) も true になります。

  • 推移性: null 以外の参照値 x、y、z について、x.equals(y) が true で、y.equals(z) が true の場合、x .equals(z) は true でなければなりません。

  • 一貫性: null 以外の参照値 x および y について、等号比較に使用されるオブジェクト情報が変更されていない場合、x.equals(y) は複数呼び出されます。回は一貫して true を返すか、一貫して false を返します。

  • null ではない参照値 x の場合、 x.equals(null) は false を返します。

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

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