判断java中两个对象是否相等

来源:互联网 发布:hr管理软件知乎 编辑:程序博客网 时间:2024/05/01 02:16
java中的基本数据类型判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false。
但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2,
obj1==obj2 判断是obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象。言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture。


如果想要自定义两个对象(不是一个对象,即这两个对象分别有自己的一块内存)是否相等的规则,那么必须在对象的类定义中重写equals()方法,如果不重写equals()方法的话,默认的比较方式是比较两个对象是否为同一个对象。
在Java API中,有些类重写了equals()方法,它们的比较规则是:当且仅当该equals方法参数不是 null,两个变量的类型、内容都相同,则比较结果为true。这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等,太多太多了,但是常见的就这些了,具体可以查看API中类的equals()方法,就知道了。

重写equals()方法的步骤一般如下:
1、先用“==”判断是否相等。

2、判断equals()方法的参数是否为null,如果为null,则返回false;因为当前对象不可能为null,如果为null,则不能调用其equals()方法,否则抛java.lang.NullPointerException异常。

3、当参数不为null,则如果两个对象的运行时类(通过getClass()获取)不相等,返回false,否则继续判断。

4、判断类的成员是否对应相等。往下就随意发挥了。

如下代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package demos;
 
/**
 * Created by hu on 2016/3/26.
 */
public class Dog {
    privateint age;
    privateString name;
    publicDog(int age,String name){
        this.age=age;
        this.name=name;
    }
    publicint getAge() {
        returnage;
    }
    publicvoid setAge(intage) {
        this.age = age;
    }
    publicString getName() {
        returnname;
    }
    publicvoid setName(String name) {
        this.name = name;
    }
    @Override
    publicboolean equals(Object obj) {
        if(obj==null){
            returnfalse;
        }
        if(this==obj){
            returntrue;
        }
        if(objinstanceof Dog){
            Dog dog=(Dog)obj;
            if(dog.age==this.age&&dog.name.equals(this.name)){
                returntrue;
            }else{
                returnfalse;
            }
        }
        returnfalse;
    }
    publicstatic void main(String[] args){
        Dog dog1=newDog(12,"wangcai");
        Dog dog2=newDog(12,"wangcai");
        Dog dog3=newDog(16,"wangcai");
        System.out.println(dog1.equals(dog2));//true
        System.out.println(dog1.equals(dog3));//false
    }
}
原创粉丝点击