209 votes

Quelles sont les principales différences entre c# et Java ?

Je veux juste préciser une chose. Ce n'est pas une question sur laquelle on est le mieux, que de la partie I de la laisser à quelqu'un d'autre à discuter. Je ne m'inquiète pas à ce sujet. J'ai posé cette question sur mon entretien d'embauche et j'ai pensé qu'il pourrait être utile d'en savoir un peu plus.

Ce sont ceux que je pouvais venir avec:

  • Java est "indépendant de la plateforme". Eh bien aujourd'hui, vous pouvez dire qu'il est le Mono de projet C# peut-être trop, mais Je crois que c'est un peu exagérer. Pourquoi? Ainsi, lorsqu'une nouvelle version de Java est fait, il est simultanément disponible sur toutes les plateformes qu'il soutient, d'autre part, combien de nombreuses fonctionnalités de C# 3.0 sont toujours portées disparues dans le Mono mise en œuvre? Ou est-il vraiment CLR vs JRE que nous devrions comparer ici?
  • Java ne supporte pas les événements et les délégués. Autant que je sache.
  • En Java, toutes les méthodes sont virtuelles
  • Outils de développement: je crois qu'il n'est pas un outil mais comme Visual Studio. Surtout si vous avez travaillé avec l'équipe des éditions vous saurez ce que je veux dire.

Veuillez ajouter d'autres que vous jugez pertinentes.

Mise à jour: Juste sauté vers le haut de mon esprit, Java n'a pas quelque chose comme des attributs personnalisés sur des classes, des méthodes, etc. Ou est-il?

329voto

Jon Skeet Points 692016

La comparaison de Java 7 et C# 3

(Certaines fonctionnalités de Java 7 ne sont pas mentionnées ici, mais l' using déclaration avantage de toutes les versions de C# sur Java 1 à 6 a été supprimé.)

Pas tous de votre résumé est correct:

  • En Java, les méthodes sont virtuelles par défaut mais vous pouvez le faire. (En C# ils sont scellés par défaut, mais vous pouvez les rendre virtuel.)
  • Il y a beaucoup d'Ide pour Java, à la fois libre (par exemple, Eclipse, Netbeans) et commerciale (par exemple, IntelliJ IDEA)

Au-delà de ce qui (et ce qui est dans votre résumé est déjà fait):

  • Les génériques sont totalement différentes entre les deux; Java génériques sont juste au moment de la compilation "truc" (mais utile). En C# et .NET génériques sont maintenues à un temps d'exécution trop, et le travail pour les types de valeur ainsi que les types de référence, en gardant la appropriée de l'efficacité (par exemple, un List<byte> comme byte[] sauvegarde, plutôt qu'un tableau de l'encadré d'octets.)
  • C# n'a pas vérifié les exceptions
  • Java n'autorise pas la création de valeur définie par l'utilisateur types
  • Java n'a pas d'opérateur et de la conversion de la surcharge
  • Java n'a pas itérateur des blocs pour la simple mise en œuvre d'itérateurs
  • Java n'a rien comme LINQ
  • En partie en raison de ne pas avoir des délégués, Java n'a rien tout à fait comme les méthodes anonymes et les expressions lambda. Les classes internes anonymes généralement de remplir ces rôles, mais clunkily.
  • Java n'a pas des arbres d'expression
  • C# n'a pas les classes internes anonymes
  • C# n'a pas de Java intérieur des classes à tous, en fait - toutes les classes imbriquées en C# sont comme Java statique classes imbriquées
  • Java n'a pas de classes statiques (qui n'ont pas toute instance constructeurs, et ne peut pas être utilisé pour les variables, paramètres, etc)
  • Java n'a pas d'équivalent à la C# 3.0 types anonymes
  • Java n'a pas implicitement tapé les variables locales
  • Java n'ont pas les méthodes d'extension
  • Java n'a pas d'objet et une collection d'initialiseur expressions
  • Les modificateurs d'accès sont un peu différents, en Java il n'y a pas (encore) d'équivalent direct de l'assemblée, donc aucune idée de "interne" de la visibilité; en C# il n'y a pas d'équivalent pour le "défaut" de la visibilité en Java, ce qui tient compte de l'espace de noms (et à l'héritage)
  • L'ordre de l'initialisation en Java et C# est subtilement différent (C# exécute variable initialiseurs avant l'enchaînement de l'appeler pour le type de base du constructeur)
  • Java ne possède pas de propriétés dans le cadre de la langue; ils sont d'une convention de get/set/méthodes
  • Java n'a pas l'équivalent de "dangereux" code
  • L'interopérabilité est plus facile en C# (et .NET en général) que de Java JNI
  • Java et C# sont un peu différentes idées d'énumérations. Java sont beaucoup plus orientées objet.
  • Java n'a pas de directives de préprocesseur (#define, #si etc en C#).
  • Java n'a pas d'équivalent en C#' ref et out pour le passage de paramètres par référence
  • Java n'a pas d'équivalent de types partiels
  • C# interfaces ne peuvent pas déclarer des champs
  • Java n'a pas d'entier non signé types
  • Java n'a pas de langue de support pour un type decimal. (java.les mathématiques.BigDecimal donne quelque chose comme Système.Virgule - avec des différences - mais il n'y a pas de support de la langue)
  • Java n'a pas d'équivalent de nullable types de valeur
  • La boxe en Java utilise prédéfinies, mais "normale") types de référence à des opérations particulières sur eux. La boxe en C# et .NET est un plus transparent de l'affaire, avec un type de référence en cours de création pour la boxe par le CLR pour tout type de valeur.

Ce n'est pas exhaustive, mais elle couvre tout ce que je pense de la main gauche.

24voto

Winston Smith Points 12029

Voici un grand dans le renvoi de profondeur par Dare Obasanjo sur les différences entre c# et Java. J’ai toujours trouver moi-même se référant à cet article lors de la commutation entre les deux.

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

11voto

C# a des propriétés automatiques qui sont incroyablement confortables et elles aident également à garder votre code plus propre, au moins quand vous n’avez pas une logique personnalisée dans votre getters et setters.

10voto

Abhishek kumar Points 111

Fonctionnalités de C# Absent en Java • C# inclut plusieurs types de primitives et de la fonctionnalité de capture de l'arithmétique des exceptions.

• Comprend un grand nombre de notation commodités sur Java, dont beaucoup, comme la surcharge des opérateurs définis par l'utilisateur et jette, sont déjà familiers à la grande communauté de programmeurs C++.

• La gestion des événements est un "citoyen de première classe"-c'est la partie de la langue elle-même.

• Permet la définition de "structures", qui sont similaires aux classes, mais peut être alloué sur la pile (à la différence des instances de classes en C# et en Java).

• C# implémente des propriétés dans le cadre de la syntaxe du langage.

• C# permet d'instructions de commutation pour fonctionner sur des chaînes de caractères.

• C# permet de méthodes anonymes fournir la fermeture de la fonctionnalité.

• C# permet l'itérateur qui emploie co-routines par l'intermédiaire d'une fonctionnelle de style mot clé yield.

• C# dispose d'un support pour les paramètres de sortie, faciliter le retour de plusieurs valeurs, une caractéristique partagée par le C++ et SQL.

• C# a la capacité d'alias espaces de noms.

• C# a "Membre Explicite de mise en Œuvre", qui permet à une catégorie spécifiquement pour mettre en œuvre les méthodes d'une interface, séparés de ses propres méthodes de la classe. Cela permet aussi de mettre en œuvre deux interfaces différentes ce qui arrive à avoir une méthode du même nom. Les méthodes d'une interface n'a pas besoin d'être public; ils peuvent être faits pour être accessible uniquement via cette interface.

• C# permet l'intégration avec COM.

• Suivant l'exemple de C et C++, C# permet d'appel par référence, pour les primitifs et les types référence.

Caractéristiques de Java Absent en C#

• Java strictfp mot-clé garantit que le résultat des opérations en virgule flottante restent les mêmes sur toutes les plateformes.

• Java prend en charge checked exceptions pour une meilleure application de récupération d'erreur et de manipulation.

9voto

Rafael Romão Points 805

Une autre bonne ressource est http://www.javacamp.org/javavscsharp/ ce site énumère les nombreux exemples que destinné presque toutes les différences entre ces deux langages de programmation.

Sur les attributs, Java a annoté, qui fonctionne presque de la même manière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X