深入java的equals方法,怎么比较两个对象的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入java的equals方法,怎么比较两个对象的相关的知识,希望对你有一定的参考价值。

当定义一个类时,首先这个类会继承Object类(所有类的父类)的equals方法,然后开发者可以根据具体业务场景去考虑要不要重写equals方法。

public boolean equals(Object obj) 
    return (this == obj);

上面代码即是Object的equals方法的实现, == 判断,即两个对象的地址完全一样的时候才相等。

当开发者定义类时不重写equals方法,则实际调用中使用Object这个父类的equals方法实现。

下面看看String的equals方法:

public boolean equals(Object anObject) 
    if (this == anObject) 
        return true;
    
    if (anObject instanceof String) 
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) 
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) 
                if (v1[i] != v2[i])
                    return false;
                i++;
            
            return true;
        
    
    return false;

这就是String重写的equals方法,可以仔细看看,很有参考价值。

接下来写段类定义的代码:

public class Person 
    private String name;  // 姓名
    private int age; // 年龄
    private String speciality; // 特长

    @Override
    public boolean equals(Object obj) 
        // 两个对象是同一个时,直接return true
        if (this == obj) 
            return true;
        
        if (obj instanceof Person) 
        // 比较对象也是Person对象时,判断name和age是否都相同
            Person p = (Person) obj;
            return name.equals(p.name) && age == p.age;
        
        return false;
    

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public int getAge() 
        return age;
    

    public void setAge(int age) 
        this.age = age;
    

    public String getSpeciality() 
        return speciality;
    

    public void setSpeciality(String speciality) 
        this.speciality = speciality;
    

测试代码:

public class Test 

    public static void main(String[] args) throws IOException 
        Person p1 = new Person("张三", 20, "java");
        Person p2 = new Person("张三", 20, "python");

        System.out.println(p1.equals(p2));
    

根据Person重写的equals方法可以知道,运行结果为 true

如果Person没有重写equals方法,那么会调用Object的equals方法,运行结果为 false

所以实际怎么比较两个对象这完全是看开发者也就是你自己的意思

参考技术A equals只能比较string和boolean类型的值,返回值为true和false,对象怎么比较?

Java中怎么比较两个字符串是不是相等?

JAVA比较两个字符串是否相等可以用equals方法或者是“==”。

equals 方法常常用来检测两个对象是否相等,即两个对象的内容是否相等,如果只是比较对象的内容,而不比较对象来源和功能类型时,常用此方法。

“==”常用于用于比较引用和比较基本数据类型时是否具有不同的功能,比较基本数据类型,如果两个值相同,则结果为true而在比较引用时,如果引用指向内存中的同一对象,结果为true。

扩展资料

equals 方法的特点:

1、自反性:x.equals(x)返回true;

2、对称性:若x.equals(y)为true,则y.equals(x)亦为true;

3、传递性:若x.equals(y)为true且y.equals(z)也为true,则x.equals(z)亦为true;

4、一致性:x.equals(y)的第一次调用为true,那么x.equals(y)的第二次、第三次、第n次调用也均为true,前提条件是没有修改x也没有修改y;

5、对于非空引用x,x.equals(null)永远返回为false。

参考资料来源:百度百科——equals

参考技术A 编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写。在java中,用的是equals();
例:A字符串和B和字符串比较:
if(A.equals(B))

返回true 或false.
String 的equals 方法用于比较两个字符串是否相等。由于字符串是对象类型,所以不能用简单的“==”判断。而使用equals比较两个对象的内容是否相等。
注意:
equals()比较的是对象的内容(区分字母的大小写格式),但是如果使用“==”比较两个对象时,比较的是两个对象的内存地址,所以不相等。即使它们内容相等,但是不同对象的内存地址也是不相同的。对于java中的String对象的比较。这个你可以在网上搜索秒秒学,里面java基础教程有专门的章节来讲解String对象的比较的。本回答被提问者采纳

以上是关于深入java的equals方法,怎么比较两个对象的的主要内容,如果未能解决你的问题,请参考以下文章

关于java中equals方法的疑惑

java工具类怎么写

java中如何判断两个变量相等

Java中Double的比较?

JAVA比较两个字符串是不是相等用啥

使用equals方法比较两个对象,Java