Here\'s a nice pitfall I just encountered. Consider a list of integers:
List list = new ArrayList();
list.add(5);
list.add(6);
Java always calls the method that best suits your argument. Auto boxing and implicit upcasting is only performed if there's no method which can be called without casting / auto boxing.
The List interface specifies two remove methods (please note the naming of the arguments):
remove(Object o)remove(int index)That means that list.remove(1) removes the object at position 1 and remove(new Integer(1)) removes the first occurrence of the specified element from this list.