Java is a lovely programming language, but after its biggest evolutionary step (from 1.4 to 1.5) some awkward things started occurring, since the new compiler should be backwards compatible. Java programmers must recall about some backwards compatibility aspects in order to understand why the Java compiler acts in a somewhat strange way at times.
Method overloading, for example, became pretty tricky. Guess what's the result for the program below...
public class MethodOverloading
void doSomething(Integer i)