求解释Java代码中==与equals()方法的差异(附代码示例)
拆解
a==b与a.equals(b)的区别(结合你的代码) 先直接说这段代码的实际输出:第一行是true,第二行是false,下面分别拆解背后的逻辑:
1. 关于a == b的比较
你的代码里,a是Integer包装类对象,b是double基本数据类型。Java在处理包装类和基本类型的==比较时,会触发自动拆箱机制:
- 首先把
Integer a拆箱成int类型的10 - 接着因为要和
double类型的b比较,int会自动转换为double类型的10.0 - 最后比较的是两个
double值:10.0 == 10.0,结果自然是true
2. 关于a.equals(b)的比较
equals方法是Object类定义的基础方法,Integer类重写了它,核心规则是:先判断参数是否是Integer类型的实例,再比较数值是否相等。
- 你的代码里,
b是double基本类型,在调用equals时会被自动装箱成Double对象 Integer的equals方法检查参数类型时,发现是Double而不是Integer,直接返回false,根本不会去比较数值
如果想让equals返回true,你需要把b转换为Integer类型,比如写成a.equals(Integer.valueOf(b)),这样参数是Integer实例,才会进入数值比较的逻辑。
内容的提问来源于stack exchange,提问作者dhanush_r




