容器大小与零比较¶
ID: java/test-for-negative-container-size
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- reliability
- correctness
- logic
Query suites:
- java-security-and-quality.qls
映射、集合、字符串或数组的长度始终至少为零。检查其中一种类型的对象长度是否大于或等于零始终为真,而检查其长度是否小于零始终为假。
建议¶
对于集合、映射和字符串,如果目的是检查对象是否为空,则最好使用 isEmpty()
方法。对于数组,检查 length
字段是否大于(不等于)零。
示例¶
以下示例显示了通过将字符串长度与零进行比较来创建受保护的文件。这可能导致尝试创建名称为空的文件。
import java.io.File;
class ContainerSizeCmpZero
{
private static File MakeFile(String filename) {
if(filename != null && filename.length() >= 0) {
return new File(filename);
}
return new File("default.name");
}
}
在以下修改后的示例中,与零的检查已替换为对 isEmpty()
的调用。这可以正确防止尝试创建名称为空的文件。
import java.io.File;
class ContainerSizeCmpZero
{
private static File MakeFile(String filename) {
if(filename != null && !filename.isEmpty()) {
return new File(filename);
}
return new File("default.name");
}
}
参考¶
Java API 规范: Collection.isEmpty()、 Map.isEmpty()、 String.isEmpty()。