你new的Card对象和你加到list里的是不同的对象
你可以测试一下:
Card a=new Card(Card.SPADE,Card.ACE);
Card b=new Card(Card.SPADE,Card.ACE);
System.out.println(a==b);
输出的一定是false
想要输出ture要这样写:
Card ace = new Card(Card.SPADE,Card.ACE);
cards.add(ace);
System.out.println(cards.contains(ace));
contains方法比较的是两个对象,
但是上边的代码可以看出是两个不同的对象(都是从新new出来的)
如果你想要一样,那么你需要重写Card类的equals方法,应该contains是通过equals来判断两个对象是否相同的。
重写比如
只要Card.TEN这个属性相同就当作两个对象相同。
if(Card.TEN这个属性相同)return true;
cards : 放Card对象的集合,若干个Card对象
ace : 表示某一个Card对象
cards.contains(ace) : 表示这若干个Card对象集合里面是否有ace,有则true,没有则false
因为是你自定义的类,所以Card类需要 重写 equals方法。具体操作:
在Card类中,添加如下代码
@Override
public boolean equals(Object o) {
if (null==o) {
return false;
}
if (o instanceof Card) {
//写你要判断两个对象相等的条件
}
}
这个问题要详细解释起来的话很复杂,你在LinkedList中加入new Card(Card.SPADE,Card.ACE)(你代码的第5行)对象与你代码中第七行中新建的对象ace已经不是同一个对象了(对象的内存空间不同),有个方法可以解决你这问题,你在Card对象中重写equals方法。
你或许会疑惑LinkedList中保存String对象,Integer等对象时为什么contains方法就有效了呢!因为Java已经重写了String等对象中的equals方法。