问题背景
在运行如下代码时,输出的结果最后一直都是2147483647
int a = 0;
for (int i = 0; i < 9; i++) {
a += Math.pow(26, i);
System.out.println("a = " + a);
}
输出结果为:
疑惑点
随着a的递增,溢出Integer.MAX_VALUE是必然的,但是溢出后应当从Integer.MIN_VALUE重新累加才对;
问题解决
Math.pow()的结果是double类型,a + Math.pow的过程从类型上看是int + double 结果会被转化成double;一旦用double表示,就可以超过Integer.MAX_VALUE,而在将a + Math.pow又赋值给int类型的变量count时发生了强转,将超过MAX_VALUE的部分截取了,这才导致这个现象
更显著的实验
double x = Integer.MAX_VALUE + 2.6d;
System.out.println(x);
int n2 = (int) (1 + x);
System.out.println(n2);
结果为