209 votos

¿Cuáles son las diferencias principales entre C# y Java?

Sólo quiero aclarar una cosa. Esto no es una cuestión en la que uno es mejor, esa parte me dejo a alguien más para discutir. No me importa. He estado esta pregunta en mi entrevista de trabajo, y pensé que podría ser útil para aprender un poco más.

Estos son los que yo podía venir con:

  • Java es "independiente de la plataforma". Bien hoy en día se podría decir que no es el Mono proyecto para C# podría ser considerado demasiado pero Creo que es un poco exagerar. ¿Por qué? Así, cuando una nueva versión de Java se hace es, simultáneamente, disponibles en todas las plataformas que soporta, por otro lado, muchas de las características de C# 3.0, todavía faltan en el Mono de implementación? O es que realmente CLR vs. JRE que debemos comparar aquí?
  • Java no soporta eventos y delegados. Por lo que yo sé.
  • En Java todos los métodos son virtuales
  • Herramientas de desarrollo: creo que no hay una herramienta de este tipo pero como Visual Studio. Especialmente si usted ha trabajado con el equipo de ediciones sabrás a lo que me refiero.

Por favor, añadir a otros que creo que son relevantes.

Actualización: Acaba de aparecer en mi mente, Java no tiene algo así como los atributos personalizados en clases, métodos, etc. O no?

329voto

Jon Skeet Puntos 692016

La comparación de Java 7 y C# 3

(Algunas de las características de Java 7 no se mencionan aquí, pero la using declaración ventaja de todas las versiones de C# sobre Java 1-6 ha sido retirado).

No todos los de su resumen es correcto:

  • En Java los métodos son virtuales por defecto, pero se pueden hacer final. (En C# que están cerradas de forma predeterminada, pero se pueden hacer virtual.)
  • Hay un montón de IDEs para Java, tanto gratuitos (por ejemplo. Eclipse, Netbeans) y comercial (por ej. IntelliJ IDEA)

Más allá de eso (y lo que está en su resumen ya):

  • Los medicamentos genéricos son completamente diferentes entre los dos; Java genéricos son solo en tiempo de compilación "truco" (pero útil). En C# y .NET los medicamentos genéricos son mantenidas en el tiempo de ejecución demasiado, y trabajo para los tipos de valor, así como los tipos de referencia, manteniendo la adecuada eficacia (p. ej. un List<byte> como byte[] de respaldo, en lugar de una matriz de caja bytes).
  • C# no tiene excepciones comprobadas
  • Java no permite la creación de valor definido por el usuario tipos
  • Java no tiene el operador y la conversión de la sobrecarga
  • Java no tiene iterador de bloques para la simple aplicación de los iteradores
  • Java no tiene nada de LINQ
  • En parte debido a no tener los delegados, Java no tiene nada parecido a los métodos anónimos y las expresiones lambda. Anónimo interior de las clases suele llenar estos papeles, pero clunkily.
  • Java no tiene árboles de expresión
  • C# no anónima interior clases
  • C# no tiene Java interna de las clases, en todos, en realidad - todas las clases en C# son como Java estática de las clases anidadas
  • Java no tiene clases estáticas (que no tienen ninguna instancia de constructores, y no pueden ser utilizados para las variables, parámetros, etc)
  • Java no tiene equivalente a la de C# 3.0 tipos anónimos
  • Java no tiene implícitamente variables locales
  • Java no tiene métodos de extensión
  • Java no tiene colección de objetos y de inicializador de expresiones
  • Los modificadores de acceso son algo diferentes - en Java no existe (por ahora) ningún equivalente directo de una asamblea, por lo que no hay idea de la "interna" de la visibilidad; en C# no hay equivalente para el "default" de la visibilidad en Java que tiene en cuenta el espacio de nombres (herencia)
  • El orden de inicialización en Java y C# es sutilmente diferente (C# se ejecuta variable inicializadores antes de la encadenado llamada a la base del tipo de constructor)
  • Java no tiene propiedades como parte de la lengua, son una convención de " get/set/es los métodos
  • Java no tiene el equivalente de "inseguro" código de
  • La interoperabilidad es más fácil en C# (y .NET en general) que en Java de la JNI
  • Java y C# tienen algo diferentes ideas de las enumeraciones. Java son mucho más orientado a objetos.
  • Java no tiene directivas de preprocesador (#define, #si, etc., en C#).
  • Java no tiene equivalente de C#'s ref y out para pasar los parámetros por referencia
  • Java no tiene equivalente de tipos parciales
  • Las interfaces de C# no se puede declarar los campos
  • Java no tiene entero sin signo tipos
  • Java no tiene idioma de apoyo para un tipo decimal. (java.math.BigDecimal proporciona algo como System.Decimal - con diferencias - pero no hay soporte de idioma)
  • Java no tiene equivalente de valor que aceptan valores null tipos
  • Boxeo en Java utiliza predefinidos (pero "normal") de los tipos de referencia con determinadas operaciones sobre ellos. Boxeo en C# y .NET es más transparente asunto, con un tipo de referencia que se crea para el boxeo por el CLR para cualquier tipo de valor.

Este no es exhaustiva, sino que cubre todo lo que puedo pensar de la mano.

24voto

Winston Smith Puntos 12029

La siguiente es una gran referencia de profundidad de Dare Obasanjo sobre las diferencias entre C# y Java. Siempre me encuentro haciendo referencia a este artículo al cambiar entre los dos.

http://www.25hoursaday.com/CsharpVsJava.html

11voto

C# tiene propiedades automáticas que son increíblemente cómodas y también ayudan a mantener limpia su código, al menos cuando no tienes lógica personalizada en tu getters y setters.

10voto

Abhishek kumar Puntos 111

Características de C# Ausente en Java • C# incluye más tipos primitivos y la funcionalidad para la captura de la aritmética excepciones.

• Incluye un gran número de métodos de representación de las comodidades más de Java, muchos de los cuales, tales como sobrecarga de operadores definidos por el usuario y los yesos, ya están familiarizados con la gran comunidad de programadores de C++.

• Manejo de eventos es un "primer ciudadano", es parte del propio lenguaje.

• Permite la definición de "estructuras", que son similares a las clases, pero puede ser asignado en la pila (a diferencia de las instancias de las clases en C# y Java).

• C# implementa propiedades como parte de la sintaxis del lenguaje.

• C# permite cambiar instrucciones para operar en las cuerdas.

• C# permite a los anónimos métodos de cierre de la funcionalidad.

• C# permite la iterador que emplea co-rutinas a través de un funcional de estilo rendimiento de la palabra clave.

• C# tiene soporte para los parámetros de salida, ayudando en el regreso de varios valores, una característica compartida por C++ y SQL.

• C# tiene la capacidad de alias espacios de nombres.

• C# tiene "Explícito Miembro de Ejecución", que permite que una clase específicamente aplicar los métodos de una interfaz, separados de sus propios métodos de clase. Esto le permite también poner en práctica dos diferentes interfaces que sucede que tiene un método con el mismo nombre. Los métodos de una interfaz no necesita ser público; pueden ser accesibles sólo a través de esa interfaz.

• C# proporciona la integración con COM.

• Siguiendo el ejemplo de C y C++, C# permite la llamada por referencia primitivos y tipos de referencia.

Características de Java Ausente en C#

• Java strictfp palabra clave garantiza que el resultado de operaciones de punto flotante siendo el mismo a través de las plataformas.

• Java es compatible con excepciones comprobadas para una mejor aplicación de la interceptación de errores y manejo.

9voto

Rafael Romão Puntos 805

Otro buen recurso es http://www.javacamp.org/javavscsharp/ este sitio enumera muchos ejemplos que ilustrar casi todas las diferencias entre estos dos lenguajes de programación.

Acerca de los atributos, Java tiene anotaciones, que funcionan casi de la misma forma.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X