Je veux juste clarifier une chose. Ce n'est pas une question sur laquelle on est mieux, cette partie je laisse à quelqu'un d'autre pour discuter. Je m'en fiche. On m'a posé cette question lors de mon entretien d'embauche et j'ai pensé qu'il pourrait être utile d'en apprendre un peu plus.
Ce sont ceux que je pourrais venir avec:
S'il vous plaît ajouter d'autres que vous pensez être pertinents.
Mise à jour: Je viens de penser, Java ne possède pas les mêmes attributs que les attributs, classes, méthodes, etc. Ou le fait-il?
Comparaison de Java 7 et de C #
(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é.)
Tout votre résumé n'est pas correct:
Au-delà de cela (et ce qui est déjà dans votre résumé):
List<byte>
en tant que byte[]
le sauvegardant, plutôt qu’un tableau d'octets encadrés.)ref
et out
de C # pour passer des paramètres par référenceCe n’est pas exhaustif, mais il couvre tout ce que je peux penser immédiatement.
Ce qui suit est une excellente référence de Dare Obasanjo sur les différences entre C # et Java. Je me retrouve toujours en train de faire référence à cet article lors du basculement entre les deux.
C # a des propriétés automatiques incroyablement pratiques qui permettent également de garder votre code plus propre, du moins lorsque vous n’avez pas de logique personnalisée dans vos getters et setters.
Fonctions de C # absentes dans Java • C # inclut davantage de types primitifs et la fonctionnalité permettant de capturer les exceptions arithmétiques.
• Inclut un grand nombre de commodités de notation sur Java, dont beaucoup, telles que la surcharge des opérateurs et les conversions définies par l'utilisateur, sont déjà familiers à la vaste 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 "structs", qui sont similaires aux classes mais peuvent être alloués sur la pile (contrairement aux instances de classes en C # et Java).
• C # implémente des propriétés dans le cadre de la syntaxe du langage.
• C # permet aux instructions de commutateur d'opérer sur des chaînes.
• C # autorise les méthodes anonymes fournissant une fonctionnalité de fermeture.
• C # permet à l'itérateur qui utilise des co-routines via un mot clé de rendement de style fonctionnel.
• C # prend en charge les paramètres de sortie, ce qui facilite le retour de plusieurs valeurs, une fonctionnalité partagée par C++ et SQL.
• C # a la capacité d'alias d'espaces de noms.
• C # a une "implémentation de membre explicite" qui permet à une classe d'implémenter spécifiquement les méthodes d'une interface, distinctes 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; ils peuvent être rendus accessibles uniquement via cette interface.
• C # fournit une intégration avec COM.
• Suivant l'exemple de C et C++, C # permet l'appel par référence pour les types de primitive et de référence.
Fonctionnalités de Java Absent in 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 mise en œuvre du recouvrement et du traitement des erreurs.
Une autre bonne ressource est http://www.javacamp.org/javavscsharp/ Ce site énumère de nombreux exemples qui illustrent presque toutes les différences entre ces deux langages de programmation.
À propos des attributs, Java a des annotations qui fonctionnent presque de la même manière.
Génériques:
Avec Java génériques, vous n'obtenez aucune efficacité d'exécution obtenue avec .NET car, lorsque vous compilez une classe générique en Java, le compilateur supprime le paramètre type et substitue Object partout. Par exemple, si vous avez une classe Foo<T>
, le compilateur Java génère le code octet comme s'il s'agissait de Foo<Object>
. Cela signifie que le casting et que la boxe/le déballage doivent être effectués en "arrière-plan".
Cela fait un moment que je joue avec Java/C # et, à mon avis, la principale différence au niveau linguistique est, comme vous l'avez souligné, les délégués.
Passez par le lien indiqué ci-dessous msdn.Microsoft.com/en-us/library/ms836794.aspx Il couvre à la fois la similitude et la différence entre C # et Java.