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


Verrouillé. Cette question et ses réponses sont verrouillées car la question est hors sujet mais a une signification historique. Il n'accepte pas actuellement de nouvelles réponses ou interactions.

Je veux juste clarifier une chose. Ce n'est pas une question sur laquelle on est le meilleur, cette partie que je laisse à quelqu'un d'autre pour 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 pourrais trouver:

  • Java est "indépendant de la plate-forme". Eh bien de nos jours, vous pourriez dire qu'il y a le projet Mono donc C # pourrait être considéré aussi mais Je crois que c'est un peu exagérer. Pourquoi? Eh bien, quand une nouvelle version de Java est fait, il est simultanément disponible sur toutes les plates-formes qu'il prend en charge, d'autre part combien de fonctionnalités de C# 3.0 manquent encore dans l'implémentation Mono? Ou est-ce vraiment CLR vs JRE que nous devrions comparer ici?
  • Java ne prend pas en charge 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'existe pas encore d'outil tel que Visual Studio. Surtout si vous avez travaillé avec team editions vous saurez ce que je veux dire.

Veuillez ajouter d'autres que vous jugez pertinents.

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

Author: Peter Mortensen, 2008-11-17

7 answers

La Comparaison de Java 7 et C# 3

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

Tous vos résumés ne sont pas corrects:

  • En Java, les méthodes sont virtuelles par défaut mais vous pouvez les rendre finale. (En C#, ils sont scellés par défaut, mais vous pouvez les rendre virtuels.)
  • Il y a beaucoup d'Es pour Java, à la fois libres (par exemple Eclipse, Netbeans) et commercial (par exemple, IntelliJ IDEA)

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

  • Les génériques sont complètement différents entre les deux; les génériques Java ne sont qu'un "truc" à la compilation (mais utile à cela). En C# et. NET, les génériques sont également maintenus au moment de l'exécution et fonctionnent pour les types de valeur ainsi que les types de référence, en conservant l'efficacité appropriée (par exemple, un List<byte> en tant que byte[] le soutenant, plutôt qu'un tableau d'octets en boîte.)
  • C # n'a pas exceptions vérifiées
  • Java ne permet pas la création de types de valeurs définis par l'utilisateur
  • Java n'a pas d'opérateur et de surcharge de conversion
  • Java n'a pas de blocs d'itérateurs pour une implémentation simple des itérateurs
  • Java n'a rien comme LINQ
  • En partie à cause de l'absence de délégués, Java n'a rien de tel que des méthodes anonymes et des expressions lambda. Les classes internes anonymes remplissent généralement ces rôles, mais maladroitement.
  • Java n'a pas d'arbres d'expression
  • C # n'a pas de classes internes anonymes
  • C # n'a pas du tout les classes internes de Java, en fait - toutes les classes imbriquées en C# sont comme les classes imbriquées statiques de Java
  • Java n'a pas de classes statiques (qui n'ont pas de constructeurs d'instance et ne peuvent pas être utilisés pour les variables, les paramètres, etc.)
  • Java n'a pas d'équivalent aux types anonymes C # 3.0
  • Java n'a pas implicitement tapé local les variables
  • Java n'a pas de méthodes d'extension
  • Java n'a pas d'expressions d'initialisation d'objet et de collection
  • Les modificateurs d'accès sont quelque peu différents - en Java, il n'y a (actuellement) pas d'équivalent direct d'un assembly, donc aucune idée de visibilité "interne"; en C#, il n'y a pas d'équivalent à la visibilité "par défaut" en Java qui prend en compte l'espace de noms (et l'héritage)
  • L'ordre d'initialisation en Java et C # est subtilement différent (C # s'exécute initialiseurs de variable avant l'appel enchaîné au constructeur du type de base)
  • Java n'a pas de propriétés dans le langage; c'est une convention des méthodes get/set/is
  • Java n'a pas l'équivalent du code "non sécurisé"
  • L'interopérabilité est plus facile en C# (et. NET en général) que le JNI de Java
  • Java et C# ont des idées quelque peu différentes des énumérations. Les Java sont beaucoup plus orientés objet.
  • Java n'a pas de directives de préprocesseur (#define, #si etc dans C#).
  • Java n'a pas d'équivalent en C#'s ref et out pour passer des paramètres par référence
  • Java n'a pas d'équivalent de types partiels
  • Les interfaces C# ne peuvent pas déclarer les champs
  • Java n'a pas de types entiers non signés
  • Java n'a pas de support language pour un type décimal. (Java.mathématique.BigDecimal fournit quelque chose comme le système.Décimal - avec des différences-mais il n'y a pas de support linguistique)
  • Java n'a pas d'équivalent de nullable types de valeur
  • Boxing en Java utilise des types de référence prédéfinis (mais "normaux") avec des opérations particulières sur eux. La boxe en C# et.NET est une affaire plus transparente, avec un type de référence créé pour la boxe par le CLR pour tout type de valeur.

Ce n'est pas exhaustif, mais il couvre tout ce que je peux penser hors de la main.

 329
Author: Jon Skeet, 2014-01-09 21:10:52

Ce qui suit est une grande référence en profondeur par Dare Obasanjo sur les différences entre C# et Java. Je me retrouve toujours à faire référence à cet article lors de la commutation entre les deux.

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

 24
Author: Winston Smith, 2008-11-17 10:55:11

C# a des propriétés automatiques qui sont incroyablement pratiques et elles aident également à garder votre code plus propre, du moins lorsque vous n'avez pas de logique personnalisée dans vos getters et setters.

 11
Author: Morten Christiansen, 2008-11-17 13:56:23

Caractéristiques de C# Absentes en Java * C # inclut des types plus primitifs et la fonctionnalité pour attraper les exceptions arithmétiques.

• Inclut un grand nombre de commodités notationnelles sur Java, dont beaucoup, telles que la surcharge de l'opérateur et les moulages définis par l'utilisateur, sont déjà familiers à la grande communauté de programmeurs C++.

• La gestion des événements est un "citoyen de première classe"-elle fait partie du langage lui-même.

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

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

• C# permet aux instructions switch de fonctionner sur des chaînes.

• C# autorise les méthodes anonymes fournissant des fonctionnalités de fermeture.

• C# autorise l'itérateur qui utilise des co-routines via un mot-clé yield de style fonctionnel.

{[0]• * C # prend en charge les paramètres de sortie, facilitant le retour de plusieurs valeurs, a fonctionnalité partagée par C++ et SQL.

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

• C# a une "implémentation membre explicite" qui permet à une classe d'implémenter spécifiquement des méthodes d'une interface, séparées de ses propres méthodes de classe. Cela lui permet également d'implémenter deux interfaces différentes qui ont une méthode du même nom. Les méthodes d'une interface n'ont pas besoin d'être publiques; elles peuvent être rendues accessibles uniquement via cette interface.

• C# fournit intégration avec COM.

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

Caractéristiques de Java absentes en C #

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

• Java prend en charge les exceptions vérifiées pour une meilleure application du piégeage et de la gestion des erreurs.

 10
Author: Abhishek kumar, 2012-01-04 16:01:13

Une Autre bonne ressource est http://www.javacamp.org/javavscsharp/ Ce site énumère de nombreux exemples qui ilustrate presque toutes les différences entre ces deux langages de programmation.

A propos des attributs, Java a des annotations, qui fonctionnent presque de la même manière.

 9
Author: Rafael Romão, 2008-11-20 13:40:52

Génériques:

Avec les génériques Java, vous n'obtenez pas l'efficacité d'exécution que vous obtenez avec.NET car lorsque vous compilez une classe générique en Java, le compilateur supprime le paramètre type et remplace l'objet partout. Par exemple, si vous avez une classe Foo<T>, le compilateur java génère du code octet comme s'il s'agissait de Foo<Object>. Cela signifie que le casting et la boxe/déballage devront être effectués en "arrière-plan".

Je joue avec Java / C# depuis un moment maintenant et, à mon avis, la principale différence au niveau de la langue sont, comme vous l'avez souligné, les délégués.

 5
Author: bruno conde, 2008-11-17 10:51:23

Veuillez passer par le lien ci-dessous msdn.microsoft.com/en-us/library/ms836794.aspx Il couvre à la fois la similitude et la différence entre C# et java

 0
Author: Kanwar Singh, 2014-05-02 08:40:35