Java vs C# is the wrong comparison to be making when it comes to what is "better" to develop on. What should be looked at is the JVM vs CLR. This is where the real power of these two languages, and the others that run on them, comes to light. Languages and libraries can be made, but if the underlying VM doesn't support certain features, no syntax will make up for it. And, in my opinion, the CLR is slightly ahead of Java when it comes to power, mostly because of the support for generics at runtime, whereas the JVM doesn't (Java generics are type erased at compile time).