You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Long类型比较出现异常结果的原因是什么?

Long类型用==比较出现不同结果的原因

这是Java中Long自动装箱的缓存机制导致的,具体拆解如下:

  1. Long是引用类型,==比较的是对象的内存地址,而非实际数值。你代码里用Long a = 100L这种写法时,Java会自动调用Long.valueOf(long)方法完成装箱操作。

  2. Long.valueOf()方法内部维护了一个缓存池,默认缓存范围是**-128到127**之间的Long对象。当传入的long值在这个范围内时,方法会直接返回缓存里的对象;超出范围时,会创建新的Long对象。

  3. 对应你的代码:

    • Long a = 100L和Long b = 100L:100在-128~127范围内,所以a和b指向同一个缓存对象,==比较地址返回true。
    • Long c = 150L和Long d = 150L:150超出缓存范围,每次装箱都会新建独立的Long对象,c和d指向不同的内存地址,==比较返回false。
  4. 正确的数值比较方式:

    • 使用equals()方法:c.equals(d),这个方法会比较Long对象的实际数值。
    • 拆箱为基本类型long后用==:(long)c == (long)d,或者直接声明为long类型而非Long。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:15:46