You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求解释Java代码中==与equals()方法的差异(附代码示例)

拆解a==ba.equals(b)的区别(结合你的代码)

先直接说这段代码的实际输出:第一行是true,第二行是false,下面分别拆解背后的逻辑:

1. 关于a == b的比较

你的代码里,aInteger包装类对象,bdouble基本数据类型。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类型的实例,再比较数值是否相等

  • 你的代码里,bdouble基本类型,在调用equals时会被自动装箱成Double对象
  • Integerequals方法检查参数类型时,发现是Double而不是Integer,直接返回false,根本不会去比较数值

如果想让equals返回true,你需要把b转换为Integer类型,比如写成a.equals(Integer.valueOf(b)),这样参数是Integer实例,才会进入数值比较的逻辑。

内容的提问来源于stack exchange,提问作者dhanush_r

火山引擎 最新活动