乘法结果转换为更宽类型¶
ID: java/integer-multiplication-cast-to-long
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- reliability
- correctness
- types
- external/cwe/cwe-190
- external/cwe/cwe-192
- external/cwe/cwe-197
- external/cwe/cwe-681
Query suites:
- java-security-and-quality.qls
将整数乘法分配给 long
类型变量或从返回类型为 long
的方法返回可能会导致意外的算术溢出。
建议¶
在乘法之前转换为 long
类型可以降低算术溢出的风险。
示例¶
在以下示例中,分配给 j
的乘法表达式会导致溢出,结果为 -1651507200
而不是 4000000000000000000
。
int i = 2000000000;
long j = i*i; // causes overflow
在以下示例中,对 k
的赋值通过将其中一个操作数转换为 long
类型正确地避免了溢出。
int i = 2000000000;
long k = i*(long)i; // avoids overflow