码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-06 13:40:36      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:不同   turn   方法   ret   ceo   分析   boolean   class   main   

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

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()方法与“==”的区别

标签:不同   turn   方法   ret   ceo   分析   boolean   class   main   

原文地址:https://www.cnblogs.com/yushaolin/p/9429666.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!