CMP.STR

如果对于 String 类型,比较的是字符串引用而不是字符串本身,将会出现此警告。

漏洞与风险

此问题可能导致意外的应用程序行为。通常,使用 == 比较对象会产生欺骗性结果,因为 == 运算符比较的是对象引用而不是对象值。要在字符串中使用 ==,程序员必须确保这些字符串是在相同类或“interned”中以静态方式创建的常量字符串,然后才能使用 intern() 方法进行比较。

缓解与预防

使用 equals() 方法代替 == 运算符来比较对象。

示例 1

复制
     /**
      *  Return symbolic name of operation
      */
     public String nameOperation(String key) {
         if (key == "++") return "PLUS";
         if (key == "--") return "MINUS";
         return "UNKNOWN";
     }

针对第 14 行报告 CMP.STR:使用 == 比较字符串“key”和“++” 针对第 15 行报告 CMP.STR:使用 == 比较字符串“key”和“--”