equals()与==的区别

本文解释了Java中==和equals()方法的区别,前者用于基本类型和对象地址比较,后者用于比较对象内容,包括String和自定义对象,强调了重写equals方法的重要性。
摘要由CSDN通过智能技术生成

在Java中 ' == ' 可以对基本类型进行比较,比较的是值是否相等

                        也可以对引用类型(对象)进行比较,比较的是引用变量所指向的空间地址

    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        System.out.println(a==b);//true
        // 基本类型比较,比较值是否相等

        String s1 = new String("aaa");
        String s2 = new String("aaa");
        System.out.println(s1==s2);//false
        //引用类型,这里比较的是两个String对象的地址是否相同
    }

那我们想要比较对象中所包含的内容是否相等,我们应该怎么做呢?

这时候就要引出我们的另一个主角----equals()方法:

源码:

    public boolean equals(Object anObject) {
        if (this == anObject) {//判断这两个东西是否值(基本类型)/对象地址(引用类型)相等
            return true;  //如果是,直接返回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类型啊

到底怎么才能比较对象内容呢???

        这时候我们就需要对该对象进行重写:::


public class People {
    private int age;
    private String name;
    private String add;

    @Override
    public boolean equals (Object o) {
        if (this == o) return true;//判断两对象地址是否相等,如果相等直接返回true
        if (o == null || getClass() != o.getClass()) return false;
        //判断两个对象的类对象是否相等,不相等直接返回false
        People people = (People) o;
        return age == people.age &&//逐个比对该对象中的每一个值
                Objects.equals(name, people.name) &&
                Objects.equals(add, people.add);
    }
}

 到了这里我们也看出来了(人话):

==             比较基本类型时,直接比较其中的值

                 比较引用类型时,比较的是对象在内存中的地址是否相等

equals      比较时,比较的是两个String类型的值是否相等

                 如果要比较两个对象中的内容是否相等,那么我们就需要重写equals()方法

(再人话:)   == 比较基本类型,equals比较对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值