Java基础面试题之基础(三)

equals 与 == 的区别?

  1. 值类型(int,char,long,boolean 等)的话

    • 都是用 == 判断相等性
  2. 对象引用的话

    • == 判断引用所指的对象是否是同一个。
    • equals 方法,是 Object 的成员函数,有些类会覆盖(override) 这个方法,用于判断对象的等价性。

例如 String 类,两个引用所指向的 String 都是 “abc” ,但可能出现他们实际对应的对象并不是同一个(和 JVM 实现方式有关),因此用 == 判断他们可能不相等,但用 equals 方法判断一定是相等的。

    public class Demo2 {
        public static void main(String[] args) {
            String demo1 = "abc";
            String demo2 = new String("abc");

            if (demo1.equals(demo2)) {
                System.out.println("相等");
            } else {
                System.out.println("不相等");
            }

            if (demo1 == demo2) {
                System.out.println("相等");
            } else {
                System.out.println("不相等");
            }
        }
    }

如何在父类中为子类自动完成所有的 hashCode 和 equals 实现?这么做有何优劣?

父类的 equals ,一般情况下是无法满足子类的 equals 的需求。

  1. 比如所有的对象都继承 Object ,默认使用的是 Object 的 equals 方法,在比较两个对象的时候,是看他们是否指向同一个地址。但是我们的需求是对象的某个属性相同,就相等了,而默认的 equals 方法满足不了当前的需求,所以我们要重写 equals 方法。
  2. 如果重写了 equals 方法,就必须重写 hashCode 方法,否则就会降低 Map 等集合的索引速度。

说一说你对 java.lang.Object 对象中 hashCode 和 equals 方法的理解。在什么场景下需要重新实现这两个方法?

答案和上一题一样

这样的 a.hashCode() 有什么用,与 a.equals(b) 有什么关系?

  1. equals 方法,用于比较对象的内容是否相等。

当覆盖了 equals 方法时,比较对象是否相等将通过覆盖后的 equals 方法进行比较(判断对象的内容是否相等)。

  1. hashCode 方法,大多在集合中用到。

将对象放入到集合中时,首先判断要放入对象的 hashCode 值与集合中的任意一个元素的 hashCode 值是否相等,如果不相等直接将该对象放入集合中。
如果 hashCode 值相等,然后再通过 equals 方法判断要放入对象与集合中的任意一个对象是否相等,如果 equals 判断不相等,直接将该元素放入到集合中,否则不放入。

有没有可能 2 个不相等的对象有相同的 hashCode?

可能会发生,这个被称为哈希碰撞。当然,相等的对象,即我们重写了 equals 方法,一定也要重写 hashCode 方法,否则将出现我们在 HashMap 中,相等的对象作为 key ,将找不到对应的 value 。

所以说,equals 和 hashCode 的关系会是&

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值