弱点描述
“RC” 表示 “Questionable use of reference equality rather than calling equals”,翻译的意思是: 使用了引用相等性(reference equality)而没有调用 equals 方法的方式进行两个对象比较,这种用法有可能有问题。这种问题可能会导致程序错误或不稳定的行为。
在 Java 中:
- 引用相等性(reference equality)使用 “==” 运算符比较两个对象的引用是否指向同一内存地址。
- equals 方法是用来比较两个对象的值是否相等
在很多情况下,编码的意图是比较两个对象的值是否相等, 而不是比较是否是同一个地址,使用引用相等性进行对象比较可能会出现问题,因为它只比较了对象的引用而没有比较对象的属性值。
示例代码
public class ReferenceEquality {
public void referenceEquality() {
String str1 = "hello";
String str2 = new String("hello");
if (str1 == str2) {
System.out.println("str1 and str2 are the same object");
}
}
}
上面的代码中,使用引用相等性比较了 str1 和 str2 是否指向同一内存地址。虽然在这个例子中输出结果为 “str1 and str2 are the same object”,但这并不意味着 str1 和 str2 的属性值相等。
除了字符串类型之外,