空白符与运算符优先级相矛盾¶
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
嵌套表达式中,运算符周围的空格建议的组合方式与 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。