Notes de cours Java
Bruno Bouzy 5 09/10/03
4. Spécificités de Java par rapport à C++
Ce paragraphe rassemble les spécificités de Java par rapport à C++. Il est donc à sauter
si vous ne connaissez pas C++.
• Pas de pointeurs, que des références…
• Interprété et dynamique
• Portable
• Multi-tache
Pas de pointeurs
Java fait une partie de sa publicité auprès des programmeurs (débutants) en clamant
qu’en Java il n’y a pas de pointeurs mais que des références et en sous-entendant donc
que Java simplifie la programmation. Nous pensons qu’il est nécessaire de faire un
paragraphe expliquant que ce n’est pas vrai. Pour cela, ce paragraphe rappelle d’abord ce
que sont des pointeurs et des références en C++, puis il explique pourquoi programmer
avec des références Java est aussi difficile que de programmer avec des pointeurs en
C++.
Rappel sur les pointeurs et références
Ce paragraphe rappelle le strict minimum sur ce que sont un pointeur ou une référence.
En C, lorsque l’on déclare une variable avec un nom et un type, un emplacement
mémoire du type de la variable est créé à une certaine adresse avec son nom pour y
accéder. L’emplacement mémoire recevra la valeur de la variable lors d’une affectation.
int x ; // une déclaration en C
x = 3 ; // une affectation en C
Le C permet de manipuler dans le programme, les adresses des emplacements mémoire
des variables. &x désigne l’adresse de la variable x. On peut déclarer des pointeurs d’un
type qui sont des variables contenant des adresses de variables de ce type avec le
symbole *.
int * p ; // un pointeur sur un entier
p = &x ; // p vaut l’adresse de x
L’opérateur * s’appelle l’opérateur de déréférencement et *p désigne la valeur contenue
dans l’emplacement mémoire dont l’adresse et p.
int y = *p ; // y vaut 3
On peut aussi déclarer une référence à une variable existante. Une référence se déclare
avec l’opérateur &. Une référence est un synonyme - un alias - pour désigner
l’emplacement mémoire d’une variable.
int & z = x ; // z est une référence a x, z vaut 3
Si on change la valeur de x, la valeur de z est aussi changée et inversement. Idem avec
*p.
x = 4; // x et z valent 4, *p aussi
z = 5; // x et z valent 5, *p aussi
*p = 6; // *p, x et z valent 6
Noter que les opérateurs & et * sont inverses l’un de l’autre. On a toujours :
*(&x) = x et &(*p) = p