Integer包装类错题整理
Integer.MAX_VALUE & Integer_MIN_VALUE
如下程序打印的结果是什么呢?
public class Demo21 {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 100;
public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++)
count++;
System.out.println(count);
}
}
错误思路:
错误答案:100
刚看到这道题,我以为答案是100. 我真傻……
也就是说,假如 END = 3; START = 3 - 3
那么 for(int i = START; i <= END; i++){count++;}
我肯定认为等于3…智障吧
用笔算都知道,最后count = 4
所以,如果有人认为上面代码的答案是101,虽然错了,也比我聪明…
错误答案:101
我也不知道自己会不会说答案是101,毕竟我认为答案是100…。
在for循环里,他的条件是:
for(int i = START; i <= END; i++)
在这里要注意,当i == END 时, i 还要 ++, 那么就是 2147483647 再加一。肯定不对呀,因为 2147483647 再加一 是 -2147483648 啊。
当 i == END时, 他的二进制是:
01111111,11111111,11111111,11111111
我们知道, int类型只有32位, 如果 上面这串二进制再加一, 那就是
10000000,00000000,00000000,00000000
然后此时 i 就变成了最小值,是 -2147483648 ,那当然满足循环条件: <= END. 肯定就会继续循环。
所以这段代码就是无限循环,当然不会有输出结果~