ITPub博客

首页 > 应用开发 > Java > java中equals方法研究

java中equals方法研究

Java 作者:爆seed 时间:2014-11-19 10:37:45 0 删除 编辑

java中的equals函数在Object类里面,而Object类是所有类的父类,所以所有的类里面都有equals函数。

“==”操作符之前用于比较两个基本数据类型的值是否相等,而对于引用数据类型,“==”操作符用于判断两个引用是否指向堆内存中的同一个对象。

class User{
    String name;
    int age;
}

class Test{
    public static void main(String args[]){
        User u1 = new User();
        User u2 = new User();
        User u3 = u1;
        boolean b1 = u1 == u2;
        boolean b2 = u1 == u3;
        System.out.println(b1);
        System.out.println(b2);
    }
}

 

equals函数用来比较两个对象的内容是否相等

对象的内容相等通常需要满足下面两个条件:

1、对象的类型相同(用instanceof比较)

2、两个对象的成员变量的值完全相同

Object函数中的equals方法:

class Test{
    public static void main(String args[]){
        User u1 = new User();
        User u2 = new User();
        User u3 = u1;
        boolean b1 = u1.equals(u3);
        System.out.println(b1);
    }
}

通过对比我们发现调用Object的equals方法和使用“==”比较两个对象是否相等没有区别,很多java视频教程都提到过这个问题,这是为什么呢?你看看object中equals方法的源码就明白啦。所以我们需要根据上述两个条件复写equals方法

class User{
    String name;
    int age;
     
    public boolean equals(Object obj){
        if(this == obj){
            return true;
        }
        boolean b = obj instanceof User;
        if(b){
            User u = (User)obj;
            if(this.age == u.age && this.name.equals(u.name)){
                return true;
            }
            else{
                return false;
            }
        }
        else{
            return false;
        }
    }
}

首先判断this和obj是否指向堆内存中的同一个对象,是的话就返回true,再判断obj是不是User类型的,不是的话返回false,是的话就进行向下转型,再比较this和u的成员变量是否相等。
基本数据类型的成员变量比较使用"==",引用数据类型的成员变量比较用equals

class Test{
    public static void main(String args[]){
        User u1 = new User();
        User u2 = new User();
        User u3 = new User();
        u1.name = "zhangsan";
        u1.age = 12;
        u2.name = "lisi";
        u2.age = 13;
        u3.name = "zhangsan";
        u3.age = 12;
        System.out.println(u1.equals(u2));
        System.out.println(u1.equals(u3));
    }
}

总结:平时我们在对java中的基本数据类型进行比较的时候,直接使用==就可以了,而如果要对引用数据类型进行比较的时候,就必须使用equals,而由于equals方法是在Object里面,而Object又是所有类的祖先类,所以每个类当中都会有equals方法。需要注意的是object里面的equals方法只是是用“==”进行比较的,所以我们在使用equals方法的时候要进行重写,重写的时候写上我们的比较规则。java中的String类就重写了这个方法,所以我们不需要再进行重写了,而是直接使用就可以。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29917475/viewspace-1338598/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: java中的参数传递
请登录后发表评论 登录
全部评论

注册时间:2014-09-26

  • 博文量
    28
  • 访问量
    34442