面试题==与equal的区别高级回答
主要体现在底层逻辑,和设计契约上
1."= =" 的本质:
它是CPU指令级的操作符。对于基本类型,它比较栈中的值(注意浮点数IEEE754的NaN和-0.0特例);对于引用类型,它比较堆内存地址。
2.equals 的本质:
它是Object类的方法。默认实现就是==。但像String、Integer等类重写了它,将其定义为逻辑相等(比较内存value)
3.避坑与调优:
使用= =比较Integer 时要注意-128到127的缓存池,
这个范围甚至可以通过-XX:AutoBoxCacheMax调整。
核心契约:重写equals 必须重写hashCode.这是为了配合HashMap等散列集合的高效定位查询,否则会导致哈希定位失败。引发Bug.

浙公网安备 33010602011771号