java 中取模运算 % 判断奇偶数的核心逻辑是检查数字除以 2 的余数。如果 n % 2 == 0,则为偶数;如果 n % 2 != 0(即余数为 1 或 -1),则为奇数。这种方法直接利用算术运算的结果进行分支判断。

% 运算符在正负数下的行为差异是什么
Java 中的 % 运算符遵循“商定余”的规则,即余数的符号与被除数相同。这意味着对于负数,-5 % 2 的结果是 -1,而不是数学意义上的 1。因此,判断奇偶时不能仅依赖 n % 2 == 1,必须使用 n % 2 != 0 来覆盖所有非零余数的情况。

public class ParityCheck {
public static void main(String[] args) {
int positive = 5;
int negative = -5;
System.out.println("Positive: " + (positive % 2)); // Output: 1
System.out.println("Negative: " + (negative % 2)); // Output: -1
if (positive % 2 != 0) {
System.out.println(positive + " is odd");
}
if (negative % 2 != 0) {
System.out.println(negative + " is odd");
}
}
}
运行上述代码,正数 5 的余数为 1,负数 -5 的余数为 -1。两者均满足 != 0 的条件,从而正确识别为奇数。若使用 == 1 判断,负数将被错误归类为偶数。
立即学习“Java免费学习笔记(深入)”;
位运算 & 1 与取模 % 2 的性能对比如何
虽然 % 2 语义清晰,但在性能敏感的场景下,位运算 n & 1 通常更高效。这是因为二进制表示中,最低位直接决定了奇偶性:最低位为 0 则是偶数,为 1 则是奇数。& 1 操作直接提取该位,避免了除法运算的开销。在现代 JVM 中,编译器往往会自动将 % 2 优化为位运算,但显式使用 & 1 能更明确地表达意图并保证底层行为一致。

public class BitwiseParity {
public static void main(String[] args) {
int num = 6;
boolean isEven = (num & 1) == 0;
System.out.println(num + " is even: " + isEven); // Output: true
int oddNum = 7;
boolean isOdd = (oddNum & 1) == 1;
System.out.println(oddNum + " is odd: " + isOdd); // Output: true
}
}
执行这段代码,6 & 1 结果为 0,判定为偶数;7 & 1 结果为 1,判定为奇数。这种基于二进制位的操作在处理大量数据时能提供更稳定的低延迟表现。
当输入为 Integer.MIN_VALUE 时,奇偶判断会出错吗
不会出错。Integer.MIN_VALUE 的值为 -2147483648,它是一个偶数。由于它是 2 的幂次方(-2^31),其除以 2 的余数始终为 0。无论是使用 % 2 还是 & 1,都能正确返回偶数结果。边界值不会改变奇偶性的基本数学定义,只要运算不溢出,判断逻辑依然可靠。


















