余数乘法¶
ID: java/multiplication-of-remainder
Kind: problem
Security severity:
Severity: warning
Precision: medium
Tags:
- maintainability
- correctness
Query suites:
- java-security-and-quality.qls
将余数运算符 %
与乘法运算符一起使用可能无法得到你预期的结果,除非你使用括号。这是因为余数运算符与乘法运算符具有相同的优先级,并且这些运算符是左结合的。
建议¶
当你将余数运算符与乘法运算符一起使用时,请确保表达式按你的预期进行求值。如有必要,请添加括号。
示例¶
考虑一个以毫秒为单位的时间,表示为 t
。要计算将时间转换为整数分钟后剩余的毫秒数,你可以编写 t % 60 * 1000
。但是,这等于 (t % 60) * 1000
,它给出了错误的结果。相反,表达式应为 t % (60 * 1000)
。
参考¶
J. Bloch 和 N. Gafter,Java 难题:陷阱、缺陷和边缘情况,谜题 35。Addison-Wesley,2005 年。
Java 教程:运算符。