'=='号和equals的区别

本文详细解析了Java中equals方法与==运算符的区别,并通过实例展示了equals方法重写前后对于对象比较的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

==号和equals方法的区别: ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值。equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性。

这里着重说下equals在重写前后重写后的不同
下面举例说明一下equals在重写和重写后的区别
重写前:

package cn.com.hwadee;

public class equal {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
       Student s=new Student();
       s.setAge(18);
       s.setName("李四");
       Student s1=new Student();
       s1.setAge(18);
       s1.setName("李四");
       boolean a=s.equals(s1);
       System.out.println(a);
    }

}
class Student{
    String name;
    int age;

    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;
    } 
}

运行结果:
这里写图片描述

重写后:

package cn.com.huadee;

public class equal {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
       Student s=new Student();
       s.setAge(18);
       s.setName("李四");
       Student s1=new Student();
       s1.setAge(18);
       s1.setName("李四");
       boolean a=s.equals(s1);
       System.out.println("s和s1比较结果为:"+a);
    }

}
class Student{
    String name;
    int age;

    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;
    }
   //equals重写
    ***@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }***

}

运行结果:
这里写图片描述

说的简单点就是equals在重写前,所比较的是内存地址,不同对象的地址不同,也就导致了比较结果为false.而在重写后,equals比较的是对象的属性(也就是对象的值),故结果显示为true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值