CodeQL 文档

空白符与运算符优先级相矛盾

ID: java/whitespace-contradicts-precedence
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - maintainability
   - readability
   - external/cwe/cwe-783
Query suites:
   - java-security-and-quality.qls

点击查看 CodeQL 仓库中的查询

嵌套表达式中,运算符周围的空格建议的组合方式与 Java 运算符优先级规则强加的组合方式不同,这是有问题的:它们可能表明代码作者误解了优先级规则。即使没有 bug,空格也可能对阅读代码的人造成混淆。

建议

确保运算符周围的空格反映运算符优先级,或者使用括号来澄清组合方式。

示例

考虑以下分配数组的代码片段


    int[] buf = new int[capacity + capacity>>1];

此处,+>> 周围的空格建议组合方式为 capacity + (capacity>>1),即分配的数组应比给定容量大 50%。

然而,实际上,+ 的优先级高于 >>,因此此代码分配的数组大小为 (capacity + capacity) >> 1,这与 capacity 相同。

参考资料

  • J. Bloch 和 N. Gafter,《Java 难题:陷阱、陷阱和角落案例》,谜题 35。Addison-Wesley,2005 年。

  • 常见弱点枚举:CWE-783

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