Here's a nice pitfall I just encountered. Consider a list of integers:
List<Integer> list = new ArrayList<Integer>(); list.add(5); list.add(6); list.add(7); list.add(1);
Any educated guess on what happens when you execute
list.remove(1)? What about
list.remove(new Integer(1))? This can cause some nasty bugs.
What is the proper way to differentiate between
remove(int index), which removes an element from given index and
remove(Object o), which removes an element by reference, when dealing with lists of integers?
The main point to consider here is the one @Nikita mentioned - exact parameter matching takes precedence over auto-boxing.