表达式始终计算为相同的值¶
ID: java/evaluation-to-constant
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- maintainability
- useless-code
Query suites:
- java-security-and-quality.qls
某些表达式始终计算为相同的结果,无论其子表达式是什么
x * 0
始终计算为0
。x % 1
始终计算为0
。x & 0
始终计算为0
。x || true
始终计算为true
。x && false
始终计算为false
。只要x
不是常量,此类表达式通常是错误的。
建议¶
如果表达式应该在每次执行时计算为相同的结果,请考虑用其结果替换整个表达式。
示例¶
以下方法尝试通过检查 x % 1 == 0
来确定 x
是否为偶数。
public boolean isEven(int x) {
return x % 1 == 0; //Does not work
}
但是,当 x
是整数时,x % 1 == 0
始终为真。正确的检查是 x % 2 == 0
。
public boolean isEven(int x) {
return x % 2 == 0; //Does work
}
参考资料¶
Java 语言规范:乘法运算符 *、取余运算符 %、整数按位运算符 &、^ 和 |、条件与运算符 && 和 条件或运算符 ||。