C Sharp : C # es un lenguaje de programación de propósito general que apareció por primera vez en 2000, como parte de la iniciativa .NET de Microsoft. Fue diseñado para Common Language Infrastructure (CLI), una especificación abierta desarrollada por Microsoft y estandarizada por ISO y ECMA. Las aplicaciones de C # se compilan en bytecode que puede ejecutarse en implementaciones de la CLI.
Java: lanzado inicialmente por Sun Microsystems en 1995, Java es un lenguaje de programación de propósito general que fue diseñado con el objetivo específico de permitir a los desarrolladores “escribir una vez, ejecutar en cualquier lugar”. Las aplicaciones Java se compilan en código de bytes que puede ejecutarse en implementaciones de Java Máquina virtual (JVM). Al igual que CLI, JVM ayuda a cerrar la brecha entre el código fuente y los 1s y 0s que la computadora entiende.
C # vs. Java: diferencias principales
- Windows contra código abierto. Si bien existen implementaciones de código abierto, C # se usa principalmente para desarrollar plataformas Microsoft, siendo el CLR de .NET Framework la implementación más utilizada de la CLI. En el otro extremo del espectro, Java tiene un enorme ecosistema de código abierto y ganó un segundo viento a pesar de su antigüedad, gracias en parte a que Google adoptó la JVM para Android.
- Soporte para genéricos. Los genéricos mejoran la verificación de tipos asistida por el compilador, en gran medida al eliminar las conversiones del código fuente. En Java, los genéricos se implementan utilizando borrados. Los parámetros de tipo genérico se “borran” y los moldes se agregan al compilarlos en el código de bytes. C # lleva los genéricos aún más lejos al integrarlos en la CLI y permitir que la información de tipo esté disponible en tiempo de ejecución, lo que produce un ligero aumento de rendimiento.
- Apoyo a los delegados (punteros). C # tiene delegados que esencialmente sirven como métodos a los que se puede llamar sin conocimiento del objeto de destino. Para lograr la misma funcionalidad en Java, debe usar una interfaz con un único método o alguna otra solución que pueda requerir una cantidad no trivial de código adicional, dependiendo de la aplicación.
- Excepciones marcadas. Java distingue entre dos tipos de excepciones: marcadas y no marcadas. C # eligió un enfoque más minimalista al tener solo un tipo de excepción. Si bien la capacidad de detectar excepciones puede ser útil, también puede tener un efecto adverso sobre la escalabilidad y el control de versiones.
- Polimorfismo: C # y Java adoptan enfoques muy diferentes al polimorfismo. Si bien Java habilita el polimorfismo de manera predeterminada, C # debe invocar la palabra clave “virtual” en una clase base y la palabra clave “anular” en una clase derivada.
- Enumeraciones (enumeraciones): en C #, las enumeraciones son listas simples de constantes con nombre donde el tipo subyacente debe ser integral. Java lleva la enumeración más lejos al tratarla como una instancia con nombre de un tipo, lo que facilita agregar comportamiento personalizado a enumeraciones individuales.
Si desea desarrollar aplicaciones de Android de C Sharp, no puede desarrollar de forma nativa para Android con C #. Puede usar algo como Xamarin o dot42, pero necesita hacer cosas adicionales detrás de escena para convertirse en una aplicación de Android.
No creo que tenga problemas para ejecutar las aplicaciones en dispositivos, siempre que esté apuntando a la API correcta.
En mi opinión, me quedaría con Java para el desarrollo a menos que desee escribir el código una vez y portarlo en todas las plataformas, entonces he escuchado cosas decentes sobre Xamarin.
Gracias