equals和hashCode方法

hashCode

hashCode :哈希码或者散列码。应该是表示对象特征值的**int整数。**如果没有任何类去覆盖hashCode方法,哈希码的值就是对象在内存中的地址。但是缺省的哈希码的值是没有什么太大意义的。实际中需要我们去覆盖hashCode 方法。

equals

equals方法用来判断两个对象从逻辑上是否相等,并不是判断两个对象是否是同一个对象。

hashCode 和 equals怎么写

这两个方法是我们经常去要覆盖的方法。
覆盖原则:equals为true,hashCode就应该相等。这是一种约定俗称的规范。即:equals为true是hashCode相等的充分非必要条件。hashCode 相等是equals为ture的必要不充分条件。
IDEA可以帮助我们重写equals和hashCode方法。下边就是通过IDEA自动生成的equals和hashCode方法

    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // 先判断两个对象是不是同一个对象,通过引用是否相等进行判断。
        if (!(o instanceof MerchandiseV2)) return false;// 判断 是不是我本省或者我的子类如果不是,那么直接返回false即可。
        MerchandiseV2 that = (MerchandiseV2) o; // 业务逻辑上判断是否相等。
        return getCount() == that.getCount() &&
                Double.compare(that.getSoldPrice(), getSoldPrice()) == 0 &&
                Double.compare(that.getPurchasePrice(), getPurchasePrice()) == 0 &&
                getName().equals(that.getName()) &&
                getId().equals(that.getId());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getName(), getId(), getCount(), getSoldPrice(), getPurchasePrice());
    }

String的equals方法

Java 字符串有优化,有专门的地方用来存储字符串,如果你创建的字符串不是很长,并且整个程序运行时创建字符穿的地方没有那么多的话,他会把字符串放在同一个地方,如果你再创建字符串,java在创建之前会去找字符串是不是已将创建了,如果有,会直接返回那个引用,为什么可以这样,因为Sting类是不可变的,不能写不能改。所以java可以放心大胆的取出整个引用,而不去再创建新的。当然如果创建的字符串很长超过了Java的优化限制,也会创建一个新的字符串。因此String 还是用equals去比较是否相等,最为稳妥,从而不会因为JAVA的优化机制而产生误判。

总结

1、Object中的hashCode和equasl方法,我们应该用IDE帮我们生成的hashCode和equasl方法去判断两个对象是否相等。
2、String中的一些优化,让我们认为应该是不等的两个对象却是相等的。因此比较对象是否相等,就用equals即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值