编辑:问题是为什么我不能使用“.contains”(在对象中覆盖.equals())来比较对象属性(字符串)而不是比较对象本身。 谢谢JB: 事实证明,我正在混淆覆盖compareTo()和覆盖equals()
编辑: 问题重新定义:
为什么我无法覆盖等于比较对象中的字符串:
public boolean equals(Object obj){
...
if(obj instanceof String){
String testString = (String) obj;
...
}
...
}
甚至超载:
public boolean equals(String stringObj){
...
}
我在某处读到编译器不使用逻辑来决定它,它使用类型。所以如果我然后调用myObj.equals(stringOne + "_" + stringTwo)
不应该这样,因为它知道正在传递一个字符串?
谢谢,
史蒂夫。
答案 0 :(得分:1)
为什么这段代码没有意义:
a < b
为真,那么b > a
必须为真。您可以将类的实例与String进行比较,但String不能与自定义类的实例进行比较。你因此违反了可比较的合同compareTo()
来检查元素是否存在。它使用equals()
。Set
。做正确的事,并使用HashSet。确保CustomClass正确实现equals()
和hashCode()
。您还可以使用HashMap<CustomClassKey, CustomClass>
,其中CustomClassKey是一个包含标识CustomClass实例的两个字段的简单类。