TUTORIELS 
Similitudes et différences entre C# et Java
Subtil mélange entre le C++ et le Java, le C# est souvent comparé au langage de Sun. Voici quelques points de comparaison entre ces deux langages.  (22 décembre 2001)
 

Pages 1 | 2

"Java killer ?", "challenger", le C# ne laisse pas indifférent. Forums de discussion, articles de presse, simples utilisateurs ou programmeurs expérimentés, pro-Java ou pas, les avis sont nombreux et ... divergents.
Si de l'avis général la plate-forme .Net est plutôt prometteuse et bien conçue, la bataille fait rage au niveau des langages, le terme "C# vs Java" est couramment repris comme accroche de nombreux articles outre-atlantique.

Pour certains l'affaire est déjà entendue, ou presque. C'est le cas de Robert X. Cringely, qui pourtant n'est pas un pro-microsoft. Il précise d'ailleurs dans son article que si le C# est sur la bonne voie, c'est surtout dû au manque de compétitivité des concurrents de Microsoft : Sun en prend pour son grade...

Pour d'autres le C# n'est pas aussi révolutionnaire qu'il veut bien le faire croire, ses innovations sont peu nombreuses, il n'est pas portable comme peut l'être Java et ne risque donc pas d'effacer Java du jour au lendemain.

Plusieurs comparatifs C# / Java existent sur le web, mais c'est de loin celui rédigé par Dare Obasanjo (73 pages en version imprimable tout de même) qui nous a paru le plus précis et le plus complet. L'auteur a découpé son "article" en cinq parties :
Les caractéristiques communes entre les deux langages, les points communs avec de légères différences, les concepts communs mais implémentés différemment, il termine par les spécificités du langage C#, suivi de celles du langage Java.

Au total 65 points de comparaison sont passés en revue, code source à l'appui. Nous nous contenterons d'opérer ici une sélection parmi les points les plus marquants.
Enfin, nous vous indiquerons pour terminer une sélection de liens où vous pourrez trouver d'autres points de vue sur ces deux langages.

Les similitudes

En java toutes les classes sont des sous-classes de java.lang.object. En C# même chose, les classes sont des sous-classes de System.Object.
Comme nous allons le voir avec un traditionnel "HelloWorld", les deux langages encapsulent leur fonction "main()". Celle-ci est "static" :

HelloWorld en Java :

public class Bonjour
{
     public static void main(String[] args)
          {
               System.out.println("Hello, World !");
          }
}


Le même en C# :

class Bonjour
{
     static void Main(string[] args)
     {
          System.Console.WriteLine("Salut, le monde!");
     }
}


Les mots-clefs des deux langages sont eux aussi assez proches.

En ce qui concerne la compilation, le C# et le Java fonctionnent de la même manière. Le bytecode Java trouve son équivalent avec le MSIL (Microsoft Intermediate Language), celui-ci est exécuté par le CLR (Common Language Runtime), équivalent de la machine virtuelle chez Microsoft. Le MSIL est alors traduit en language natif via un compilateur JIT (Just in Time). Java peut lui aussi compiler le bytecode en language natif via ce type de compilateur.

Enfin, l'héritage multiple n'est pas davantage permit en C# qu'en Java.

Les ressemblances, à quelques détails près

La syntaxe employée en C# pour l'héritage provient du C++, elle diffère donc quelque peu avec celle utilisée par Java, exemple avec une classe B héritant d'une classe A :

En Java :

class B extends A implements Comparable
{
     int compareTo(){}
     public static void main(String[] args)
     {
          System.out.println("Hello World");
     }
}

En C# :

using System;
class B:A, IComparable
{
     int CompareTo(){}
     public static void Main(String[] args)
     {
          Console.WriteLine("Hello World");
     }
}

On le voit les mots-clefs "extends" et "implements" n'existent pas en C#.

Aux "package" Java, le C# répond par les "namespace" (ensemble de classes). A la différence des "package", les "namespaces" ne renseignent pas sur le stockage physique des fichiers sources.

En Java comme en C# il est possible de poser des verrous exclusifs sur une partie du code (un seul thread a le droit d'accéder à un objet particulier à un moment donné). Ici, seul le mot clef change :

En java :

public void withdrawAmount(int num)
{
     synchronized(this)
     {
          if(num < this.amount)
          this.amount -= num;
     }
}

En C# :

public void WithdrawAmount(int num)
{
     lock(this)
     {
          if(num < this.amount)
          this.amount -= num;
     }
}


Au chapitre des types de données, les différences se situent au niveau du type "byte". Le type "byte" en Java est signé et correspond au type "sbyte" en C#. Le C# rajoute en plus des versions nons signées pour les types int, long, short, elles se nomment "uint", "ulong", et "ushort". Le type "byte" du C# n'est pas signé.
Enfin, à condition de sacrifier rapidité d'exécution et espace de stockage, le C# permet de stocker sans erreurs d'arrondis les nombres décimaux, exemple :

decimal dec = 100.44m
double dbl = 1.44e2d

"m", "e", et "d" signifient respectivement "nombre décimal", "notation exponentielle" et "type double".

Pages 1 | 2

 
[ Arnaud GadalJDNet
 
Accueil | Haut de page