12
Les attributions de valeur (le signe “=“)

Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

Embed Size (px)

Citation preview

Page 1: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

Les attributions de

valeur

(le signe “=“)

Page 2: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

Dans cette présentation, nous allons tenter de

représenter ce qui se passe dans la mémoire

de l’ordinateur quand un programme

s’exécute.

Parfois, un rectangle rouge apparaîtra en bas

de l’écran : il s’agit de la représentation de la

mémoire de l’ordinateur.

Page 3: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

En Java, on appelle type primitif le type

double,

float,

int,

short,

char,

byte,

boolean.

Page 4: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

Lorsque l’on déclare un type primitif, une case est

créée en mémoire afin de pouvoir y stocker une

valeur.

int a;

a = 3;

Par exemple, si je fais :

Dans la mémoire, Java va d’abord créer une case

appelée a

3a

puis il va placer la valeur 3 dans cette case.

Page 5: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

3a

Si je rajoute une seconde variable dans mon code :

int a, b;

a = 3;b = 4;

A la fin, j’aurai ceci en mémoire :

4b

Page 6: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

Lorsque je fais une attribution de valeur (un

« égal ») entre types primitifs, j’effectue une

recopie de la valeur de l’un dans l’autre.

int a, b;

a = 3;b = a;

Par exemple, si je fais :

Voilà ce qui se passe en mémoire :

3a b

recopie

3

Page 7: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

Ceci est valable pour les types primitifs.

Pour les autres types de données (tableaux,

structures de données), ça ne fonctionne pas

de la même manière.

Page 8: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

3ta

Si je travaille avec des tableaux, voici ce qu’il se passe

:int[] ta, tb;

ta = new int[3];ta[0] = 3;ta[1] = 6;ta[2] = 5;

tb=ta;

tb

ta et tb sont deux tableaux d’entiers.

On construit trois cases sur le tableau ta.

6 5

On remplit les trois cases du tableau ta.

Ici, on dit que ta et tb sont le même

tableau (on ne recopie pas ta dans tb, on

ne créé pas un second tableau).

Page 9: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

3ta

Quelle différence fondamentale cela

apporte-t-il ?

int a, b;a = 3;b = a;

int[] ta, tb;ta = new int[3];ta[0] = 3;ta[1] = 6;ta[2] = 5;tb=ta;

tb6 5

Fusionnons les deux codes précédents...

On retrouve en mémoire deux entiers et un

tableau.

3a

3b

tb[1]=9;

On modifie la valeur de b, mais la valeur de a

n’est pas modifiée.

On modifie la valeur de la seconde case de tb,

et comme ta et tb sont le même tableau, ta est

modifié aussi !

b=6;

69

On peut dire que l’on a en mémoire un entier

nommé a, un entier nommé b, et un tableau

avec deux noms : ta et tb.

Page 10: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

Lorsque l’on est en présence de types primitifs, une

attribution de valeur (un « égal ») revient à recopier la

valeur de l’un dans l’autre.

En présence de types non primitifs, une attribution de

valeur revient en fait à désigner par deux noms

différents un même objet.

Page 11: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

Mais comment faire alors pour recopier le tableau ta

dans tb (et avoir deux tableaux en mémoire) ?

int i;

tb = new int [ ta.length ];

for (i=0; i<tb.length; i=i+1){ tb[i] = ta[i];}

Solution : construire un nouveau tableau sur

tb, et recopier case par case, ta dans tb.

3ta

tb6 5

On construit sur tb un nouveau tableau

d’entiers de la taille de ta.

Puis, on recopie case par case les éléments

de ta dans tb : comme chaque élément de ta

est un entier, le signe « = » effectue bien une

recopie de valeurs.

3 6 5

Page 12: Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand

Rappelez-vous que le signe égal recopie les valeurs dans le cas de types primitifs

(boolean, byte, char, short, int, float, double).

Pour les autres types de données (tableaux,

structures de données), le signe égal fait

pointer la variable sur l’objet en question.