equals()方法与“==”的区别

Posted yushaolin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了equals()方法与“==”的区别相关的知识,希望对你有一定的参考价值。

首先我们来上手一段代码:

public class Studnet {
    String name;
    public Studnet(String name){
        this.name=name;
    }
    public static void main(String[] args) {
        Studnet studnet1=new Studnet("张三");
        Studnet studnet2=new Studnet("张三");
        System.out.println(studnet1==studnet2);//false
        System.out.println(studnet1.equals(studnet2));//false
    }
}

 

   在上面的这段代码当中,我们创建了两个student对象,分别student1和student2分别是两个对象的引用。下面我们来对“==”和equals进行分析:

在“student1==student2”当中:是直接比较两个对象的引用,我们不难判断出,因为两者指向的对象分别位于不同的存储空间,所以student1和student2指向的地址也不一样,故而student1与student2是永远不相等的,如若比较两个对象是否相等,是比较的是对象里面的内容是否一致。总结如下:

  要想判断两个对象是否相等,不能通过比较两个对象的引用是否相等,这是永远都得不到相等的结果的,因为两个对象的引用永远不会相等,所以正确的比较方法是直接比较这两个对象,比较这两个对象的实质是不是一样的,即这两个对象里面的内容是不是相同的,通过比较这两个对象的属性值是否相同而决定这两个对象是否相等。

  因为默认的equals()方法里面比较的是两个引用是否指向同一对象,所以在上述代码中,两种比较实际是一样的。解决办法是在Student类里面重写equals()方法,代码如下:

@Override
    public boolean equals(Object obj) {
        // TODO 自动生成的方法存根
        if (obj==null) {
            return false;
        }else{
            if (obj instanceof Studnet) {
                Studnet studnet=(Studnet) obj;
                if (((Studnet) obj).name==this.name) {
                    return true;
                }
            }
        }
        return false;
    }

 

再执行上述代码:

public class Studnet {
    String name;
    public Studnet(String name){
        this.name=name;
    }
    public static void main(String[] args) {
        Studnet studnet1=new Studnet("张三");
        Studnet studnet2=new Studnet("张三");
        System.out.println(studnet1==studnet2);//false
        System.out.println(studnet1.equals(studnet2));//true
    }
}

 

以上是关于equals()方法与“==”的区别的主要内容,如果未能解决你的问题,请参考以下文章

== 与 equals()方法的区别

Java中“==”与equals方法的区别

Java equals()方法与“==”的区别

hashCode与equals的区别与联系

equals与==之间的区别

彻底弄懂Java中的equals()方法以及与"=="的区别