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”和“--”