85 votes

Les développeurs C# apprenant Java, quelles sont les principales différences que l'on peut négliger ?

Pour les développeurs c# qui se lancent dans l'apprentissage de Java, y a-t-il de grandes différences sous-jacentes entre les deux langages qu'il convient de souligner ?

Peut-être que certaines personnes pensent que les choses sont les mêmes, mais il y a des aspects importants qui ne doivent pas être négligés ? (ou vous pouvez vraiment vous planter !)

Peut-être en termes de constructions OOP, de la façon dont le GC fonctionne, de références, de déploiement, etc.

121voto

Jon Skeet Points 692016

Il y a quelques inconvénients qui me viennent à l'esprit :

  • Java ne dispose pas de types de valeurs personnalisées (structs), il est donc inutile de les chercher.
  • Les enums Java sont très différents de l'approche "nombres nommés" de C# ; ils sont plus OO. Ils peuvent être utilisés de manière très efficace, si vous êtes prudent.
  • byte est signé en Java (malheureusement)
  • En C#, les initialisateurs de variables d'instance exécutent antes de le constructeur de la classe de base ; en Java, il s'agit de après il le fait (c'est-à-dire juste avant le corps du constructeur dans la classe "this")
  • En C#, les méthodes sont scellées par défaut. En Java, elles sont virtuelles par défaut.
  • Le modificateur d'accès par défaut en C# est toujours "l'accès le plus restrictif disponible dans le contexte actuel" ; en Java, c'est l'accès "package". (Il vaut la peine de se documenter sur les modificateurs d'accès particuliers en Java).
  • Les types imbriqués en Java et en C# fonctionnent quelque peu différemment ; en particulier, ils ont des restrictions d'accès différentes, et à moins que vous ne déclariez que le type imbriqué soit static il aura une référence implicite à une instance de la classe qui le contient.

20voto

jspcal Points 20715

Voici une comparaison très complète des deux langues :

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

Ajouté : http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp

17voto

Pratik Points 5401

Je suis surpris que personne n'ait mentionné les propriétés, quelque chose d'assez fondamental en C# mais absent en Java. À partir de C# 3, les propriétés sont automatiquement implémentées. En Java, vous devez utiliser des méthodes de type GetX/SetX.

Autre différence évidente, les expressions LINQ et lambda en C# 3 sont absentes en Java.

Il y a quelques autres choses simples mais utiles qui manquent à Java, comme les chaînes verbatim (@""), la surcharge des opérateurs, les itérateurs utilisant yield et le préprocesseur.

L'un de mes avantages personnels en C# est que les noms des espaces de noms ne doivent pas nécessairement suivre la structure physique des répertoires. J'aime beaucoup cette flexibilité.

10voto

Sneal Points 1088

Il y a beaucoup de différences, mais celles qui me viennent à l'esprit sont les suivantes :

  • Manque de surcharge des opérateurs en Java. Attention à la différence entre instance.Equals(instance2) et instance == instance2 (surtout avec les chaînes de caractères).
  • Habituez-vous à ce que les interfaces ne soient PAS préfixées par un I. Vous verrez souvent des espaces de noms ou des classes suffixés par Impl à la place.
  • Le verrouillage doublement vérifié ne fonctionne pas à cause du modèle de mémoire Java.
  • Vous pouvez importer des méthodes statiques sans les préfixer avec le nom de la classe, ce qui est très utile dans certains cas (DSLs).
  • Les instructions de commutation en Java ne requièrent pas de valeur par défaut, et vous ne pouvez pas utiliser de chaînes de caractères comme étiquettes de cas (IIRC).
  • Les génériques Java vont vous mettre en colère. Les génériques Java n'existent pas au moment de l'exécution (du moins dans la version 1.5), c'est un truc de compilateur, ce qui pose des problèmes si vous voulez faire de la réflexion sur les types génériques.

8voto

Chris Jester-Young Points 102876

.NET a réifié les génériques ; Java a effacé les génériques.

La différence est la suivante : si vous avez un ArrayList<String> dans .NET, vous pouvez dire (au moment de l'exécution) que l'objet est de type ArrayList<String> alors qu'en Java, au moment de l'exécution, l'objet est du type ArrayList ; le String la partie est perdue. Si vous mettez du non String dans le ArrayList le système ne peut pas le faire respecter, et vous ne le saurez qu'après avoir essayé d'extraire l'objet et que le lancer a échoué.

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