De los pocos que he visto, me quedo con Java, al ser completamente portable, es decir que los programas generados pueden usarse en CUALQUIER PLATAFORMA que tenga la máquina virtual Java(yo he visto juegos en móviles en Java) y poco engorroso. Por ejemplo, he probado C++, y aunque está chulo(de hecho se parecen mucho) eso de los punteros se puede hacer confuso, y permite acceder a zonas de memoria, por ejemplo con arrays sin que te advierta el lenguaje en tiempo de ejecución, y eso puede llegar a muchas confusiones. Java te impide acceder a posiciones de memoria directamente, y en caso de arrays, te advierte que se pasa de los límites del array.
Además Java gestiona muy bien a mi gusto el recolector de basura, ya que es automático, elimina objetos que ya no estén siendo referenciados(por tanto, que ya no se puede acceder a ellos)
La pega de Java es que al ser parcialmente interpretado, es más lento que C++, por ejemplo. No es apto para aplicaciones en las cuales el tiempo es un factor límite y que exige tener instalada la máquina virtual Java, aunque eso es fácil y es gratuita, pero molaría que el SO ya la tuviera por defecto.
He probado C# y es bastante parecido a Java también(y a C++) sus ventajas es que no tiene lo difícil de C++, los punteros. Bueno, si los tiene, pero no son necesarios. Lo único que he visto que es distinto de C# de Java a la hora de programar es la herencia y llamar al constructor de la clase de la cual se hereda, que simplemente se escribe de otra manera.
@ Danko, a lo que dices abajo, yo al menos, no.