为什么我违反 SonarQube java 规则“零不应该是可能的分母”

wu *_*ong 5 java sonarqube

对于以下代码

double total = 0.0;
//do something for total, anyway
return total < 10E-6 ? 0 : (1.0 / total);
Run Code Online (Sandbox Code Playgroud)

然后声纳指示我“在进行此除法之前确保“总计”不能为零。”。但如果total为零,它甚至达不到1.0/total。这是声纳错误还是我的错?

Jir*_*sek 4

这不是一个错误,而是 SonarQube 用于检查代码(静态代码分析)的方法的固有限制:SonarQube 通常无法评估表达式(想象一下条件是否取决于用户输入),因此它无法知道“else”分支是否存在是否会被执行。

它所看到的只是您初始化total0.0,并且您稍后可能会在它仍然为零时调用尝试除以的代码total(它知道您没有向其中分配任何其他内容,或者找到了一个保持零的分支)。