功能
输出int范围内最小值到最大值的所有数是否是奇数,代码如下。
public class Main {
public static void main(String[] args) {
for (int i = Integer.MIN_VALUE; i <= Integer.MAX_VALUE; ++i) {
boolean isEven = (i % 2 == 1);
System.out.println(String.format("i=%d, isEven=%b", i, isEven));
}
}
}
分析
咋一看,可能会感觉没有问题啊!其实不然,就这短短几行,里面的坑还是不少哦。
错误内容如下:
1. for 循环是死循环。当i从int类型的最小值循环到int的最大值时,满足 i <= Integer.MAX_VALUE 的条件,i继续自增,接着i就溢出变成int类型的最小值了,又满足 i <= Integer.MAX_VALUE 的条件,循环无法终止;
2. i % 2 == 1 来判断i是否是奇数,是不合适的,因为当i是负奇数时,i % 2是-1,所以应该用i % 2 != 0来判断i是奇数;
3. i % 2 来判断奇数的效率没有 i & 1 高。
本文分析了一段Java代码中存在的问题,包括整型溢出导致的死循环、奇数判断错误及效率问题,并提供了正确的实现方式。
&spm=1001.2101.3001.5002&articleId=78512876&d=1&t=3&u=96ee7290d53b4c85ab0b03a197f0f0a0)
723





