CodeQL 文档

乘法结果转换为更宽类型

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

点击查看 CodeQL 仓库中的查询

将整数乘法分配给 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

参考

  • ©2025GitHub, Inc.
  • 条款
  • 隐私