ArrayList contains method not work as I would expect?

Viewed 7040

ArrayList use equals() in its contains method to see if provide object equals any item in the list as the document say:

Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e)). see this

I have this class

class Foo
{
  private String value;
  public Foo(String value)
  {
    this.value = value;
  }

  @Override
  public boolean equals(Object o)
  {
    return o == null ? this.value == null : o.toString().equals(this.value);
  }
}

I want to use contains method to check if item exists like this

List<Foo> list = new ArrayList<Foo>();

Foo item1 = new Foo("item1");
Foo item2 = new Foo("item2");
list.add(item1);
list.add(item2);

System.out.println(item1.equals("item1"));       //return true
System.out.println(list.contains("item1"));      //false !! why?!

but contains method return false , while item1.equals("item1") return true.

why contains return false when it use equals method for provided object

7 Answers
Related