I personally hate Java too. C# is I think what Java wanted to be, you know how often you have good idea and try it out but it's not right, in fact it's usually an damned ugly unworkable mess... that's Java. Then some time later you try again based on what you learnt from your first attempt and this time it's really good, not perfect but much better than before... that's C# 
People go to C/C++/Obj-C or whatever then decide how to whatever it is that they had in mind. What we should be doing is deciding what our priorities are, security vs speed, and then picking the correct language for the task.
If it's speed then you still need to ask what the right language is. For Games it's probably C/C++, but for numerical analysis Fortran is probably faster. I dislike Fortran too but it might be the correct tool for the job at hand.
C/C++ are hard to write well, and even when you do you get a lot of unintentional bugs even from experienced coders. I see them every single day even from some of the worlds best developers. They're languages that are simply too error prone for a lot of tasks - a lot of that is due to pointers.
Trouble is once someone knows C they think that's it, it's the ultimate hammer, it can do anything. No one ever stops to think if they "should" be using it for everything.
In some ways C# is useless, its not a cross platform language, it has run time enviroment but no virtual machine, so its in the same category as VB, the only upside is that C# is more like C++ then VB, so you can use C# to proto type stuff.
As you can't do so many things wrong whit C# it is relatively easy to learn language.
Down side to C# is that if you can't type #ifdef and stuff like that.
Another downside C# depends on Microsoft class libraries.
Java has virtual machine, bit like running a emulator, should work every where provided all the Java classes are supported by OS, but they are not on AmigaOS so it more or less useless.
Besides Java is slow because its not native (not the language and not the VM).