Les types primitifs et les types par référence
Les types primitifs et les types par référence
Les types primitifs sont :
- le type booléen boolean, qui n'est pas un type entier
, et qui peut prendre les valeurs false et
true
- le type caractère char
- les types entiers byte, short,
int et long
- les types nombres flottants float et double
Les autres types de données sont des types par référence vers des objets ou des tableaux. En fait, ce sont de variables destinées à contenir des adresses d'objets ou de tableaux, ce que l'on exprime par : les données non primitives sont manipulées "par référence" alors que les données primitives sont manipulées par valeur.
Il est important de comprendre cette manipulation par référence des types non primitifs. Par exemple, si on appelle une méthode en lui envoyant en paramètre un tableau, on transmet en fait (comme en C) l'adresse du tableau ; si la méthode appelée modifie le contenu d'un tableau reçu en paramètre, elle modifie aussi le contenu du tableau dont on lui a transmis l'adresse, puisqu'il s'agit du même tableau ! De même pour les attributs des objets transmis en paramètres lors d'appels de méthodes.
Signalons que la valeur par défaut de tout attribut d'un type "par référence" est la valeur null.
Nous vous conseillons détudier soigneusement la question suivante et, si le résultat n'est pas clair pour vous, de suivre les explications données avec la réponse.
Question : Quelle est, à l'exécution, la sortie du programme suivant ?
class PetitObjet {
private int valeur = 5;
int getValeur() {
return this.valeur;
}
void setValeur(int val) {
this.valeur = val;
}
}
class EssaiPassage {
static void travailler(int[] tableau, int n, PetitObjet petit) {
tableau[0] = 4;
n = 7 ;
petit.setValeur(10);
}
public static void main(String[] arg) {
int[] table = {1, 2};
int n = 3;
PetitObjet petit = new PetitObjet();
travailler(table, n, petit);
System.out.println(table[0] + " " + n + " " + petit.getValeur());
}
}