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

数组转int整数时超9位出现异常值的问题求助

问题原因与解决方案

为什么会得到错误结果1410065407?

Java里的int是32位有符号整数,它的取值范围是 -2147483648 到 2147483647(也就是 -2^31 到 2^31-1)。你要转换的9999999999已经远大于2147483647,在循环计算过程中,number的值会超出int能容纳的最大值,触发整数溢出。

Java对整数溢出的处理是按补码规则循环的,溢出后的值会绕回到int范围的最小值重新计算,最终就得到了1410065407这个看似无厘头的结果。

解决办法

根据你的需求,有三种常用的修复方式:

1. 使用更大范围的整数类型long

long是64位有符号整数,取值范围是 -9223372036854775808 到 9223372036854775807,足够容纳10个9的数字(9999999999是10位,远小于long的最大值)。修改代码如下:

public class YourClassNameHere{
    public static void main(String[] args){
        long number = 0; // 把int改成long
        int[] num = {9,9,9,9,9,9,9,9,9,9,9};
        for(int i=0; i<num.length; i++){
            number = number*10 + num[i];
        }
        System.out.println(number);
    }
}

2. 用BigInteger处理超大数字

如果你的数组长度超过18位(比如20个9),long也会溢出,这时候可以用Java提供的java.math.BigInteger类,它能处理任意大小的整数:

import java.math.BigInteger;

public class YourClassNameHere{
    public static void main(String[] args){
        BigInteger number = BigInteger.ZERO;
        int[] num = {9,9,9,9,9,9,9,9,9,9,9};
        for(int digit : num){
            number = number.multiply(BigInteger.TEN).add(BigInteger.valueOf(digit));
        }
        System.out.println(number);
    }
}

3. 直接拼接成字符串(简单无溢出)

如果只是需要输出这个数字,直接把数组里的数字拼接成字符串是最省心的方式,完全不会有溢出问题:

public class YourClassNameHere{
    public static void main(String[] args){
        int[] num = {9,9,9,9,9,9,9,9,9,9,9};
        StringBuilder sb = new StringBuilder();
        for(int digit : num){
            sb.append(digit);
        }
        System.out.println(sb.toString());
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:17:27