==とequalsメソッドの違いは何ですか

==と等しいの違い

==比較は値です。
比較が基本データタイプの場合、比較は可変値です。
比較が参照データタイプの場合、比較はアドレス値です。

Equalsは、参照データタイプを比較します
。hashCodeメソッドとequalsメソッドがオーバーライドされていない場合、アドレス値が比較されます。Objectのequalsメソッドで使用されているためです。
hashCodeとequalsメソッドをオーバーライドする場合は、書き直されたルールを比較してください。
例:2つの文字列文字列が比較される場合:コンテンツが比較されます。Stringの最下層は、コンテンツを比較するためにequalsメソッドを書き換えるためです。

==番号

public class TestEq {
    
    
    public static void main(String[] args) {
    
    
        // 1 == 比较的是值
        // 1.1 基本数据类型:数值
        int a = 1;
        int b = 1;
        System.out.println( a == b );       //true
        // 1.2 引用数据类型:地址值
        Student s1 = new Student();
        Student s2 = s1;
        System.out.println( s1 == s2 );     //true
        Student s3 = new Student();
        System.out.println(s2 == s3);       //false

    }
}

@Data
class Student {
    
    
    private String name;
}


デフォルトに等しい

public class TestEq2 {
    
    
    public static void main(String[] args) {
    
    
        // 2 equals
        Student2 s1 = new Student2();
        Student2 s2 = s1;
        Student2 s3 = new Student2();
        // Object.equals方法,默认使用 ==
        System.out.println( s1.equals(s2) );        //true
        System.out.println( s2.equals(s3) );        //false

    }
}

class Student2 {
    
    
    private String name;
}

書き換えは等しい

public class TestEq2 {
    
    
    public static void main(String[] args) {
    
    
        // 2 equals
        Student2 s1 = new Student2("jack"); // 空、"rose"
        Student2 s2 = s1;
        Student2 s3 = new Student2("jack"); // 空
        // Object.equals方法,默认使用 ==
        System.out.println( s1.equals(s2) );        //true
        System.out.println( s2.equals(s3) );        //true

    }
}

class Student2 {
    
    
    private String name;

    public Student2() {
    
         //无参构造

    }

    public Student2(String name) {
    
          //有参构造
        this.name = name;
    }

    //name如果相同返回true
    @Override
    public boolean equals(Object o) {
    
    
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student2 student2 = (Student2) o;

        return name != null ? name.equals(student2.name) : student2.name == null;
    }

    @Override
    public int hashCode() {
    
    
        return name != null ? name.hashCode() : 0;
    }
}

HashCode()とequals()の関数と違い

機能:hashCode()メソッドはequals()メソッドと同じ機能を持ち、2つのオブジェクトが等しいかどうかを比較します。
違い:

  • equals()は、コンテンツの多いオブジェクトを比較し、より包括的で、時間がかかり、効率が低下します。絶対的に信頼できる
    equals()2つのオブジェクトが等しい場合、hashCode()は等しくなければなりません。
  • hashCode()は1つのハッシュ値のみを比較し、効率が高く、
    hashCode()が等しい2つのオブジェクトは信頼できず、equal()は必ずしも等しいとは限りません。

比較の原則:
最初に比較する

  • hashCode()が同じでない場合、2つのオブジェクトは同じではありません
  • hashCode()が同じ場合、比較は等しい

目的:効率を大幅に向上させるだけでなく、比較の絶対的な正確性を確保することもできます

おすすめ

転載: blog.csdn.net/weixin_43464372/article/details/108326310