||What I Hate About Your Programming Language|
Java does not support operator overloading so neither does the String class. What happens is that the compiler automatically creates a StringBuffer class for you and appends() various stuff together. It was designed to make life easier for the programmer. Do everythign by hand if you want - it won't make a difference.
It's exception handling tediousness is necessary to ensure the security of the language. Take it or leave it.
I agree about the library issues. I have multiple versions lying around, from 1.1 to 1.4 and also the microedition version. It sucks to have to change the classpath each time i want to compile something.