equals与==判断相等

一、==

== 判断相等,判断的是物理地址相等。

二、equals 判断相等

equals 与hashCode 都是Object的方法。

所有的类都继承于Object,如果不重写equals。equals判断相等,底层也是使用==来判断物理地址相等。

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

与equals伴随的是hashCode方法。(hashCode也是Object的方法)

 public native int hashCode();

hashCode返回的不是地址值,而是与地址相关的一个值,它也是唯一的,地址发生改变,hashCode码也会发生变化。

2.1 自定义类,equals判断相等

我们自定义了一个类,要求:如果2个对象的属性的值相等,则这两个对象就相等,需要重写equals方法。

自定义类,相等判断(根据属性的值),重写equals


class Man{
    private String name;
    public Man(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Man man = (Man) o;
        return Objects.equals(name, man.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

2.2 hashCode 

hashCode 如果不重写,则调用Object的hashCode 方法

 public native int hashCode();

hashCode 与equals总是成对出现,java规范,如果两个对象通过equals判断相等, hashCode应该返回相同的哈希code码

三、String字符串判断相等

        // 方式一
        String name = "acd";
        

这个产生的数据,在jvm的常量池中。

// 方式二
        String name1 = new String("acd");

这种方式,产生的数据,存放在jvm的堆中。

做相等判断

       System.out.println(name == name1);
        System.out.println(name.equals(name1));

打印结果:

false
true

==,判断不相等,因为物理地址不一样,一个在常量池中,一个在堆中。

equals判断相等,因为字符串重写了equals方法,比较的是具体的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做测试的喵酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值