2008-09-18 40 views
7

Aprendí Java en la universidad, y luego fui contratado por una tienda de C# y lo he usado desde entonces. Pasé mi primera semana dándome cuenta de que los dos idiomas eran casi idénticos, y los siguientes dos meses descubriendo las pequeñas diferencias. En su mayor parte, me daba cuenta de las cosas que Java tenía que C# no tiene, y por lo tanto era en su mayoría frustrado. (ejemplo: tipos enum que son clases completas, no solo enteros con una nueva capa de pintura) Desde entonces, he llegado a apreciar el mundo C#, pero no puedo decir que conocía Java lo suficientemente bien como para realmente contrastar los dos, así que Tengo curiosidad por obtener una muestra representativa de la comunidad.Comparando C# y Java

¿Cuáles son los méritos y debilidades relativas de C# y Java? Esto incluye todo, desde la estructura del lenguaje hasta los IDE disponibles y el software del servidor.

+0

+1; No puedo entender por qué esta pregunta tiene 3 votos a favor. –

+0

+1; gran pregunta, realmente necesita más votos! – Shire

Respuesta

8

Comparar y contrastar los idiomas entre los dos puede ser bastante difícil, ya que de muchas maneras son las bibliotecas asociadas que utiliza en asociación con el idioma que mejor muestra las diversas ventajas de uno de otro.

Así que voy a tratar de hacer una lista de tantas cosas que puedo recordar o que ya han sido escritos y tener en cuenta que creo que tiene la ventaja:

  1. desarrollo de GUI (gruesa o delgada). C# combinado con .NET es actualmente la mejor opción.
  2. Encuadernación de fuente de datos automatizada. C# tiene una gran ventaja con LINQ, también una gran cantidad de bibliotecas de 3ra parte también da el borde
  3. conexiones SQL. Java
  4. Auto-boxing. Ambos lenguajes lo proporcionan, pero las propiedades C# proporcionan un mejor diseño en lo que respecta a los adaptadores y getters
  5. Anotación/Atributos. Los atributos de C# son una implementación más clara y clara
  6. Gestión de memoria: Java VM en todas las pruebas que he realizado es muy superior a CLR
  7. Recolección de basura: Java es otro claro ganador aquí. El código no administrado con el marco C#/.NET hace que esto sea una pesadilla, especialmente cuando se trabaja con GUI.
  8. Genéricos: creo que los dos idiomas están básicamente vinculados aquí ... He visto buenos puntos que muestran que cada lado es mejor. Mi instinto es que Java es mejor, pero no tiene lógica en la que basarlo. También he usado genéricos C# genéricos ALLOT y Java solo unas pocas veces ...
  9. Enumeraciones. Java hasta el final, la implementación de C# está corrompida por lo que a mí respecta.
  10. XML - Mezcle aquí. Las capacidades de serialización y XML que obtienes con .NET superan de forma nativa lo que obtienes con eclipse/Java fuera de la caja. Pero hay muchas bibliotecas para ambos productos que ayudan con XML ... He intentado algunas y nunca estuve realmente feliz con ninguna de ellas. Me he quedado con el C# XML nativo combinado con algunas bibliotecas personalizadas que he creado yo solo y estoy acostumbrado, así que es difícil dar una comparación de lejos en este punto ...
  11. IDE - Eclipse es mejor que Visual Estudio para trabajos que no son de GUI. Así que Java gana para la GUI y Visual Studio gana para GUI ...

Esos son todos los elementos que no puedo pensar por el momento ... Estoy seguro de que puedes literalmente recoger cientos de elementos para comparar y contrastar los dos. Esperemos que esta lista sea una sección transversal de las características más comúnmente utilizadas ...

2

Otra cosa a tener en cuenta, es posible que también desee comparar sus respectivas máquinas virtuales.

La comparación de CLR y Java VM le dará otra manera de diferenciar entre los dos.

Por ejemplo, si se realiza un multiproceso pesado, Java VM tiene un modelo de memoria más potente que el CLR (equivalente a .NET).

6

¿No se ha hecho esto hasta la muerte? Al final del día, no son las herramientas las que importan, sino lo que haces con ellas.

+0

En realidad, si está haciendo la comparación para un proyecto específico, no se ha hecho hasta la muerte. Las comparaciones genéricas (flamewars) son inútiles, pero las dos son diferentes. Comprender las diferencias sería la clave para saber cuándo usar una sobre otra (cuando ambas son opciones realistas). – therealhoff

+1

No estoy seguro de lo que significa "ya", todavía no está registrado aquí. Y si las herramientas no importan, ¿eso significa que no te importaría escribir aplicaciones web en FORTRAN? –

+1

No tratando de ser sarcástica, solo señalando que las herramientas sí importan. No son todo, pero tampoco son nada. –

2

C# tiene una mejor GUI con WPF, algo en lo que Java tradicionalmente ha sido pobre.

C# tiene LINQ, que es bastante bueno.

De lo contrario, los 2 son prácticamente lo mismo: ¿cómo crees que crearon una biblioteca de clases tan grande tan rápidamente cuando salió .NET por primera vez? Las cosas han cambiado ligeramente desde entonces, pero fundamentalmente, C# podría llamarse MS-Java.

4

Una diferencia es que C# puede funcionar mejor con Windows. La desventaja de esto es que no funciona bien con nada pero Windows (excepto tal vez con Mono, que no he probado).

1

No tome esto como algo más que una opinión, pero personalmente no soporto la GUI de Java. Está lo suficientemente cerca de Windows pero no del todo, por lo que se mete en un área del valle misteriosa donde me resulta realmente molesto.

C# (y otros lenguajes .Net, supongo) me permiten crear programas que combinen perfectamente con Windows, y eso me hace feliz.

Por supuesto, es discutible si es que no estamos hablando acerca del desarrollo de una aplicación de escritorio ...

0

Java:

  • enumeraciones en Java coces tanto culo, ni siquiera es gracioso.
  • Java soporta la varianza genérica

C#:

  • C# ya no se limita a Windows (Mono).
  • La falta de la palabra clave interna en Java es bastante decepcionante.
0

Usted dijo:

tipos de enumeración que son clases de pleno derecho, no sólo los números enteros con una nueva capa de pintura

¿Usted ha mirado realmente en la salida? Si compila una aplicación con enumeraciones en y luego lee el CIL, verá que una enumeración es en realidad una clase sellada derivada de System.Enum.

Las herramientas como el Reflector de Red-Gate (anteriormente Lutz Roeder) lo desmontarán lo más cerca posible del C# original para que no se pueda ver fácilmente lo que está sucediendo debajo del capó.

+0

De la especificación de ASP.Net 3.0: "Cada tipo de enumeración tiene un tipo integral correspondiente llamado tipo subyacente del tipo enum". Sí, son clases. Pero puede encasillarlos hacia y desde int y no puede definir sus miembros. Son simples clases de envoltura, son de una capa nueva de pintura. –

0

Como dijo Elizabeth Barrett Browning: ¿Cómo te amo? Déjame contar las formas.

Disculpe el aspecto cualitativo (y cuantitativo) de esta publicación.

Comparar estos 2 idiomas (y sus tiempos de ejecución asociados) es muy difícil. Las comparaciones pueden realizarse en muchos niveles y enfocarse en muchos aspectos diferentes (como el desarrollo de la GUI mencionado en publicaciones anteriores). La preferencia entre ellos suele ser personal y no solo técnica.

C# se basó originalmente en Java (y el CLR en el JRE) pero, en mi humilde opinión, ha ido, en general, más allá de Java en sus características, expresividad y posiblemente utilidad. Al ser controlado por una compañía (frente a un comité), C# puede avanzar más rápido que Java. Las diferencias van y vienen a través de lanzamientos con Java a menudo jugando catch up (como la reciente adición de lambdas a Java que C# ha tenido durante mucho tiempo). Ninguno de los dos idiomas es un súper conjunto del otro en todos los aspectos, ya que ambos tienen características (y debilidades) que el otro no tiene.

Una comparación detallada lado por lado probablemente tome cientos de páginas. Pero mi opinión es que para la mayoría de las tareas de programación relacionadas con negocios modernos, son similares en potencia y utilidad. La diferencia más importante es, probablemente, en la portabilidad. Java se ejecuta en casi todas las plataformas populares, que C# ejecuta principalmente en plataformas basadas en Windows (ignorando Mono, que no ha tenido mucho éxito). Java, debido a su portabilidad, podría decirse que tiene una comunidad de desarrolladores más grande y, por lo tanto, más compatibilidad con bibliotecas y marcos de terceros.

Si siente la necesidad de seleccionar entre ellos, su mejor criterio es su plataforma de interés. Si todo su trabajo se ejecutará solo en sistemas Windows, en mi humilde opinión, C#/CLR, con su lenguaje más rico y su capacidad para interactuar directamente con las API nativas de Windows, es un claro ganador. Si necesita portabilidad de sistema cruzado, Java/JRE es un claro ganador.

PS. Si necesita más habilidades de trabajos portátiles, entonces IMHO Java también es un ganador.