Prestazioni - Pari
Entrambe le piattaforme funzionano estremamente bene praticamente per tutte le applicazioni.
Non molto per distinguerli, anche se la mia esperienza soggettiva è che Java ha un leggero vantaggio per le applicazioni di lunga durata, mentre .Net è più veloce per i tempi di avvio delle applicazioni.
Strumenti disponibili (anche strumenti di terze parti) - Discutibili
Dipende dagli strumenti di cui hai bisogno e dalle tue conoscenze.
.Net ha certamente alcuni ottimi strumenti forniti da Microsoft. D'altra parte, esistono strumenti altrettanto validi nel mondo Java, ad esempio negli ambienti Eclipse, Netbeans di IntelliJ.
Compatibilità multipiattaforma : vincita Java
.Net è fondamentalmente legato alle piattaforme Microsoft (Windows, Xbox ecc.). Le implementazioni complete non sono disponibili per piattaforme non Microsoft .
Mono è bello, ma in realtà non ti offre la piena capacità multipiattaforma perché non supporta tutte le librerie .Net (ad esempio non puoi aspettarti che tutte le cose della GUI di Windows funzionino correttamente, quindi a meno che non passi a un toolkit multipiattaforma come GTK # non sarai in grado di eseguire la tua app su piattaforme diverse)
Java è veramente portatile. Non solo la lingua, ma soprattutto le librerie Java sono portatili. Fornendo di attenersi alle librerie Java pure (ad esempio Swing per GUI), il codice verrà eseguito ovunque si disponga di un ambiente di runtime Java.
Librerie (in particolare librerie di terze parti) : vincita Java
Probabilmente il miglior punto di forza della piattaforma Java è il vasto ecosistema di librerie, in particolare le librerie open source. Qualche esempio:
- Tutte le librerie e gli strumenti di Apache
- Tutte le librerie nel vasto ecosistema Eclipse
- Tutte le librerie hanno contribuito / gestito da Google
- JBoss e tutti gli strumenti aziendali correlati gestiti da Red Hat
Costo (Oracle sembra provare a monetizzare Java) - Java vince se vai all'open source, altrimenti Pari.
Puoi avere uno stack Java open source al 100% che è gratuito e non ti lega a nessuna particolare piattaforma proprietaria. Questo è gratuito al 100%.
In alternativa, è possibile acquistare IntelliJ IDEA, eseguire Java su Windows e utilizzare un database proprietario, nel qual caso è praticamente lo stesso costo di un tipico stack Microsoft .NET.
Processo di sviluppo (più semplice / più veloce) - discutibile
Questo probabilmente dipende più dall'esperienza dei tuoi sviluppatori con ciascuna piattaforma piuttosto che dal particolare attribuito della piattaforma.
.Net ha sicuramente degli ottimi strumenti che possono renderti molto produttivo per semplici app GUI su Windows. Non sorprende in quanto questo è il "punto debole" per lo sviluppo .Net.
D'altra parte, preferisco lo stack Java per lo sviluppo lato server. Con strumenti come Maven e tutte le funzionalità di implementazione / integrazione continue è possibile stabilire un processo di sviluppo molto efficace per robuste app lato server.
Dal punto di vista linguistico, C # presenta alcuni vantaggi in termini di produttività rispetto a Java. D'altra parte, se stai sviluppando sulla piattaforma Java al giorno d'oggi, la tendenza non è quella di utilizzare Java stesso, ma invece utilizzare uno dei nuovi linguaggi JVM come Scala, Groovy o Clojure - se lo fai, sarai molto più produttivo di C # o Java.