Java中的长到int转换会产生错误的结果

时间:2017-04-08 11:25:13

标签: java type-conversion primitive-types

我正在尝试分离一个长数字的数字,以便它可以表示为整数数组 e.g。

12345......888     as [1,2,3,4,......8,8,8]

通常情况下,我采取n%10来取出最后一位数字,而n / 10则减去数字,即

public static void main(String[] args) {
    long temp = 111111111111111110L;
    while(temp>0){
        System.out.println("----------");
        System.out.println(temp%10);
        System.out.println((int)temp%10);
        temp=temp/10;
    }
}

temp%10给出正确的结果。但它不能直接添加到int列表中。如果我尝试输入强制转换,它会在前几次迭代时给出不正确的结果。 输出

----------
0
-2
----------
1
9
----------
1
-5
----------
1
1
----------
1
9
----------
1
-3
----------
1
-5
----------
1
-7
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1

我使用的解决方法是

int digitArray[] = new int[somenumber];
String s = Long.toString(n);
for(int i=0;i<s.length();i++){
    digitArray[i]=Integer.parseInt(""+s.charAt(i));
}

但我很好奇为什么当类型转换的数字是单个数字,即在长范围内时,类型转换不能以第一种方式工作。

1 个答案:

答案 0 :(得分:8)

表达式评估规则导致此问题。

当你做的时候

(int)temp%10

实际上,longtemp被投放到int,导致integer溢出,

你的意思

(int)(temp%10)