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

Java中int与Integer的最大值是否相同?HackerRank问题解惑

问题解答

1. int 和 Integer 的最大值完全一致

没错,两者的存储上限是完全相同的:

  • 基本类型 int 的最大值为 2^31 - 1(即2147483647)
  • 包装类 Integer 通过常量 Integer.MAX_VALUE 定义最大值,数值同样是2147483647
    题目中蜡烛高度的最大值仅为10^7,远低于这个上限,所以存储范围不是导致用例失败的原因。

2. 改成 Integer 类型后用例失败的核心原因

问题出在 == 的比较逻辑上:
当 maxElement 是 Integer 类型时,element == maxElement 比较的是两个 Integer 对象的内存引用,而非它们的实际数值。

Java 对 Integer 有自动装箱缓存机制:对于 -128 到 127 之间的整数,JVM会复用缓存中的对象,此时用 == 对比数值相同的对象会返回true;但当数值超过127时,每次装箱都会创建新的 Integer 对象,哪怕数值一致,== 对比引用也会返回false,导致相等的蜡烛高度无法被正确计数,最终部分用例执行失败。

而使用 int 类型时,element(Integer类型)会自动拆箱为 int,所有比较都是基于基本类型的数值,逻辑完全正确。

3. 用 Integer 作为 maxElement 的修复方案

只需要把引用对比改为数值对比即可,两种可行方式:

方法一:使用 equals() 方法对比数值

public static int birthdayCakeCandles(List<Integer> candles) {
    Integer maxElement = 0;
    Integer maxElementCount = 0;
    for(Integer element: candles) {
        if (element > maxElement) {
            maxElement = element;
            maxElementCount = 1;
        } else if (element.equals(maxElement)) { // 替换为equals比较数值
            maxElementCount++;
        }
    }
    return maxElementCount;  
 }

方法二:手动拆箱为int后对比

public static int birthdayCakeCandles(List<Integer> candles) {
    Integer maxElement = 0;
    Integer maxElementCount = 0;
    for(Integer element: candles) {
        if (element > maxElement) {
            maxElement = element;
            maxElementCount = 1;
        } else if (element.intValue() == maxElement.intValue()) { // 拆箱后比较数值
            maxElementCount++;
        }
    }
    return maxElementCount;  
 }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:23:04