【发布时间】:2012-01-27 18:04:12
【问题描述】:
我在该列表中有一个列表,我创建了一个对象。通过使用contains() 方法,我想检查对象是否已经存在。为此,我重写了equals() 方法。一切都很完美。但是当我尝试为String 和int 做同样的事情时,equals() 覆盖不起作用。为什么会这样?我刚刚发布了一些示例代码供参考。
public class Test
{
private int x;
public Test(int n)
{
x = n;
}
public boolean equals(Object o)
{
return false;
}
public static void main(String[] args)
{
List<Test> list = new ArrayList<Test>();
list.add(new Test(3));
System.out.println("Test Contains Object : " + list.contains(new Test(3))); // Prints always false (Equals override)
List<String> list1 = new ArrayList<String>();
list1.add("Testing");
String a = "Testing";
System.out.println("List1 Contains String : " + list1.contains(a)); // Prints true (Equals override not working)
}
}
【问题讨论】:
-
您没有覆盖 String 对象的 equals 方法。您正在为 Test 对象显式覆盖等于。
-
我不明白这个问题。您有一个字符串列表,该列表包含您添加的字符串,
contains表示相同。你不能对String做同样的事情,如果你试图扩展 String,它就不会编译。