JD.VNU
JD.VNU 显示给一个变量赋一个值后,该值一直未被读取。
漏洞与风险
在大多数情况下,这只是一个质量欠佳的代码,但有时如果设置了一个值,但该值从未被使用过,则这种情况可能表示一种严重的逻辑错误。
缓解与预防
优化代码,并移除未使用的赋值。
示例 1
复制
boolean checkArray(int arr[]) {
for (int i = 0; i < arr.length; i++) {
int item = arr[i];
String hexString = Integer.toHexString(item);
if (i % 2 == 0) {
return true;
}
}
return false;
}
针对第 16 行报告 JD.VNU:在数组中为每个“项”创建了 hexString,不过 hexString 在创建后从未被使用过。
示例 2
复制
private long getTimeLen(long arr[]) {
long time1 = 0;
long time2 = 0;
long len = 0;
for (int i = 0; i < arr.length; i += 2) {
time1 = arr[i];
time1 = arr[i + 1];
if (time1 < time2) {
long d = time1 - time2;
if (d > len) {
len = d;
}
}
}
return len;
}
关于代码段中两个赋值的 JD.VNU:
- 第 14 行的赋值:此运算无意义且非最佳,因为“time1”在第 18 行被覆盖。
- 第 18 行的赋值:开发人员想初始化“time2”变量,但却用了“time1”。