Desempenho - Par
Ambas as plataformas têm um desempenho extremamente bom para praticamente todos os aplicativos.
Não há muito para diferenciá-los, embora minha experiência subjetiva seja que o Java tenha uma ligeira vantagem para aplicativos de longa execução, enquanto o .Net é mais rápido para o tempo de inicialização do aplicativo.
Ferramentas disponíveis (mesmo ferramentas de terceiros) - discutível
Depende de quais ferramentas você precisa e com o que você está familiarizado.
O .Net certamente possui ótimas ferramentas fornecidas pela Microsoft. Por outro lado, existem igualmente boas ferramentas no mundo Java, por exemplo, nos ambientes Eclipse, Netbeans do IntelliJ.
Compatibilidade entre plataformas - vitória em Java
.Net está fundamentalmente vinculado às plataformas Microsoft (Windows, Xbox etc.). Implementações completas não estão disponíveis para nenhuma plataforma que não seja da Microsoft .
O mono é bom, mas na verdade não oferece capacidade completa para várias plataformas, porque não suporta todas as bibliotecas .Net (por exemplo, você não pode esperar que todo o material da GUI do Windows funcione corretamente, portanto, a menos que você mude para um kit de ferramentas de plataforma cruzada, como GTK #, você não poderá executar seu aplicativo em plataformas diferentes)
Java é genuinamente portátil. Não apenas a linguagem, mas muito mais importante: todas as bibliotecas Java são portáteis. Se você aderir às bibliotecas Java puras (por exemplo, Swing for GUI), seu código será executado em qualquer lugar em que você tenha um ambiente de tempo de execução Java.
Bibliotecas (especialmente bibliotecas de terceiros) - vitória em Java
Provavelmente, a melhor força da plataforma Java é o vasto ecossistema de bibliotecas, especialmente as de código aberto. Alguns exemplos:
- Todas as bibliotecas e ferramentas Apache
- Todas as bibliotecas no vasto ecossistema Eclipse
- Todas as bibliotecas contribuídas / mantidas pelo Google
- JBoss e todas as ferramentas corporativas relacionadas mantidas pela Red Hat
Custo (a Oracle parece tentar monetizar o Java) - o Java vence se você for de código aberto, caso contrário, Even.
Você pode ter uma pilha Java 100% de código aberto que é gratuita e não o vincula a nenhuma plataforma proprietária específica. Isso é 100% gratuito.
Como alternativa, você pode comprar o IntelliJ IDEA, executar o Java no Windows e usar um banco de dados proprietário; nesse caso, é praticamente o mesmo custo que uma pilha típica do Microsoft .NET.
Processo de desenvolvimento (mais fácil / rápido) - discutível
Provavelmente isso depende mais da experiência de seus desenvolvedores em cada plataforma, e não do atributo específico da plataforma.
O .Net certamente possui ótimas ferramentas que podem torná-lo muito produtivo para aplicativos GUI simples no Windows. Não é de surpreender, pois este é o "ponto ideal" para o desenvolvimento de .Net.
Por outro lado, prefiro a pilha Java para o desenvolvimento do servidor. Com ferramentas como o Maven e todos os recursos contínuos de implantação / integração, você pode estabelecer um processo de desenvolvimento muito eficaz para aplicativos robustos do lado do servidor.
O C # em termos de linguagem tem algumas vantagens de produtividade em relação ao Java. Mas por outro lado, se você está desenvolvendo na plataforma Java atualmente, a tendência é não usar o próprio Java, mas usar uma das novas linguagens da JVM, como Scala, Groovy ou Clojure - se você fizer isso, será muito mais produtivo do que C # ou Java.