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”。

相关检查器