Solo quiero aclarar una cosa. Esta no es una pregunta sobre cuál es mejor, esa parte se la dejo a otra persona para que la discuta. No me importa Me hicieron esta pregunta en mi entrevista de trabajo y pensé que podría ser útil aprender un poco más.
Estos son los que se me ocurren:
- Java es "plataforma independiente". Bueno, hoy en día se podría decir que existe el proyecto Mono , por lo que C # también podría considerarse, pero creo que es un poco exagerado. ¿Por qué? Bueno, cuando se realiza una nueva versión de Java, está disponible simultáneamente en todas las plataformas que admite, por otro lado, ¿cuántas características de C # 3.0 aún faltan en la implementación de Mono? ¿O es realmente CLR vs. JRE que deberíamos comparar aquí?
- Java no admite eventos y delegados. Por lo que sé.
- En Java todos los métodos son virtuales.
- Herramientas de desarrollo: creo que todavía no existe una herramienta como Visual Studio. Especialmente si has trabajado con ediciones en equipo, sabrás a qué me refiero.
Por favor agregue otros que considere relevantes.
Actualización: Acabo de aparecer en mi mente, Java no tiene algo como atributos personalizados en clases, métodos, etc. ¿O sí?
Respuestas:
Comparando Java 7 y C # 3
(Algunas características de Java 7 no se mencionan aquí, pero la
using
ventaja de la declaración de todas las versiones de C # sobre Java 1-6 se ha eliminado).No todo su resumen es correcto:
Más allá de eso (y lo que ya está en su resumen):
List<byte>
como abyte[]
respaldo, en lugar de una matriz de bytes en caja).ref
yout
para pasar parámetros por referenciaEsto no es exhaustivo, pero cubre todo lo que se me ocurre.
fuente
La siguiente es una gran referencia en profundidad de Dare Obasanjo sobre las diferencias entre C # y Java. Siempre me encuentro refiriéndome a este artículo cuando cambio entre los dos.
http://www.25hoursaday.com/CsharpVsJava.html
fuente
TimeDate
clase para tener siempre tiempo, y aún no ha tenido tiempo de hacerlo :(C # tiene propiedades automáticas que son increíblemente convenientes y también ayudan a mantener su código más limpio, al menos cuando no tiene una lógica personalizada en sus captadores y definidores.
fuente
Características de C # ausentes en Java • C # incluye tipos más primitivos y la funcionalidad para capturar excepciones aritméticas.
• Incluye una gran cantidad de convenciones de notación sobre Java, muchas de las cuales, como la sobrecarga de operadores y las conversiones definidas por el usuario, ya son familiares para la gran comunidad de programadores de C ++.
• El manejo de eventos es un "ciudadano de primera clase", es parte del lenguaje mismo.
• Permite la definición de "estructuras", que son similares a las clases pero pueden asignarse en la pila (a diferencia de las instancias de clases en C # y Java).
• C # implementa propiedades como parte de la sintaxis del lenguaje.
• C # permite que las declaraciones de cambio operen en cadenas.
• C # permite métodos anónimos que proporcionan funcionalidad de cierre.
• C # permite un iterador que emplea co-rutinas a través de una palabra clave de rendimiento de estilo funcional.
• C # tiene soporte para parámetros de salida, lo que ayuda en el retorno de múltiples valores, una característica compartida por C ++ y SQL.
• C # tiene la capacidad de alias de espacios de nombres.
• C # tiene "Implementación explícita de miembros" que permite a una clase implementar específicamente métodos de una interfaz, separados de sus propios métodos de clase. Esto también le permite implementar dos interfaces diferentes que tienen un método con el mismo nombre. Los métodos de una interfaz no necesitan ser públicos; se puede hacer que sean accesibles solo a través de esa interfaz.
• C # proporciona integración con COM.
• Siguiendo el ejemplo de C y C ++, C # permite la llamada por referencia para tipos primitivos y de referencia.
Características de Java ausente en C #
• La palabra clave strictlyfp de Java garantiza que el resultado de las operaciones de coma flotante permanezca igual en todas las plataformas.
• Java admite excepciones comprobadas para una mejor aplicación de la captura y el manejo de errores.
fuente
Otro buen recurso es http://www.javacamp.org/javavscsharp/ Este sitio enumera muchos ejemplos que ilustran casi todas las diferencias entre estos dos lenguajes de programación.
Sobre los atributos, Java tiene anotaciones, que funcionan casi de la misma manera.
fuente
Genéricos:
Con los genéricos de Java, en realidad no obtienes nada de la eficiencia de ejecución que obtienes con .NET porque cuando compilas una clase genérica en Java, el compilador quita el parámetro de tipo y sustituye Object en todas partes. Por ejemplo, si tiene una
Foo<T>
clase, el compilador de Java genera código de bytes como si fueraFoo<Object>
. Esto significa que la conversión y el boxing / unboxing deberán realizarse en el "fondo".He estado jugando con Java / C # por un tiempo y, en mi opinión, la principal diferencia a nivel de lenguaje son, como usted señaló, los delegados.
fuente
Visite el enlace que figura a continuación msdn.microsoft.com/en-us/library/ms836794.aspx Cubre tanto la similitud como la diferencia entre C # y java
fuente