Je veux juste clarifier une chose. Ce n'est pas une question sur laquelle on est meilleur, cette partie que je laisse à quelqu'un d'autre pour en 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 trouver:
- Java est "indépendant de la plate-forme". Eh bien, de nos jours, on pourrait dire qu'il y a le projet Mono , donc C # pourrait aussi être considéré, mais je pense que c'est un peu exagéré. Pourquoi? Eh bien, lorsqu'une nouvelle version de Java est terminée, elle est simultanément disponible sur toutes les plates-formes qu'elle prend en charge, en revanche 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. Pour autant que je sache.
- En Java, toutes les méthodes sont virtuelles
- Outils de développement: je crois qu'il n'y a pas encore un tel outil que Visual Studio. Surtout si vous avez travaillé avec des éditions en équipe, vous comprendrez ce que je veux dire.
Veuillez en ajouter d'autres que vous jugez pertinentes.
Mise à jour: Je viens de penser, Java n'a pas quelque chose comme des attributs personnalisés sur les classes, les méthodes, etc. Ou est-ce le cas?
Réponses:
Comparaison de Java 7 et C # 3
(Certaines fonctionnalités de Java 7 ne sont pas mentionnées ici, mais l'
using
avantage 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>
commebyte[]
support, plutôt qu'un tableau d'octets encadrés).ref
etout
pour passer des paramètres par référenceCe n'est pas exhaustif, mais il couvre tout ce que je peux penser de manière autonome.
la source
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 à me référer à cet article lorsque je bascule entre les deux.
http://www.25hoursaday.com/CsharpVsJava.html
la source
TimeDate
classe afin d'avoir toujours le temps, et n'a pas encore eu le temps :(C # a des propriétés automatiques 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.
la source
Caractéristiques de C # absent en Java • C # comprend plus de types primitifs et la fonctionnalité pour intercepter les exceptions arithmétiques.
• Comprend un grand nombre de fonctionnalités de notation sur Java, dont beaucoup, telles que la surcharge des opérateurs et les transformations définies par l'utilisateur, sont déjà familières à la grande communauté des 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 peuvent être allouées 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 switch de fonctionner sur les chaînes.
• C # permet des 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, aidant au retour de plusieurs valeurs, une fonctionnalité partagée par C ++ et SQL.
• C # a la capacité d'alias les espaces de noms.
• C # a "Implicit Member Implementation" 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 se trouvent avoir une méthode du même nom. Les méthodes d'une interface n'ont pas besoin d'être publiques; ils ne peuvent être rendus accessibles que via cette interface.
• C # assure l'intégration avec COM.
• Suivant l'exemple de C et C ++, C # autorise l'appel par référence pour les types primitifs et de référence.
Fonctionnalités de Java absent 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 recouvrement et de la gestion des erreurs.
la source
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.
la source
Génériques:
Avec les génériques Java, vous n'obtenez en fait aucune de 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 Object partout. Par exemple, si vous avez une
Foo<T>
classe, le compilateur java génère du code d'octet comme s'il étaitFoo<Object>
. Cela signifie que le casting et la boxe / unboxing devront être effectués en arrière-plan.Je joue avec Java / C # depuis un certain temps maintenant et, à mon avis, les principales différences au niveau du langage sont, comme vous l'avez souligné, les délégués.
la source
Veuillez parcourir 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
la source