Para iniciar con las diferencias, la más importante a nuestro parecer es que .NET posee una arquitectura estándar a la cual ya se han acoplado una gran cantidad de lenguajes de programación por ejemplo: C#, VB .net, C++, Pascal, Phyton, etc. Mientras que en JAVA consta de un único lenguaje con el cual se puede trabajar. Además la gran limitante de .NET es que trabaja exclusivamente sobre MS Windows, JAVA por su parte es multiplataforma.
En cuanto a las semejanzas, la idea de funcionamiento de estos elementos es que todos lenguajes se conviertan en un único lenguaje siendo este un precompilado en .NET llamado IL y en JAVA Bytecode, un detalle llamativo el lenguaje para IL es MSIL al cual lo describen como un Bytecode para .NET. El concepto de maquinas virtuales que terminen de compilar la aplicación es común para estos elementos, en .NET existe el llamado JIT (Just In Time Compiler), el cual es una traducción dinámica determinada a convertir nuestra aplicación a lenguaje maquina para cada arquitectura en particular, por el lado de JAVA existe la llamada JVM(Java Virtual Machine) la encargada de terminar de complicar la aplicación dada la arquitectura sobre la que trabaje.
Me parece que estos dos tiene cada uno sus ventajas y sus deventajas, pero que usarlos ya depende de cada persona y como se sienta mejor. Cual se le haga mas facil manejar, y cual es mas efectiva.