Les types de variables en Java
Je commence ce blog par un article simple qui porte sur les types de variables en Java.
Comme vous le savez, les variables en Java sont divisées en 2 catégories : les types primitifs et les types références.
Les 8 sortes de type primitif sont : byte, short, int, long, float, double, boolean et char.
Les 3 sortes de type référence : class, interface et tableau.
Petite remarque en passant : un tableau de char n’est pas équivalent à une String.
Ainsi, la méthode equals() de la classe String ne fonctionnera pas comme vous le souhaitez même s’il n’y aura pas d’erreur à la compilation. Le code suivant vous le prouvera :
//Ce code va imprimer "pas pareil" sur la sortie standard.
String s = "abc";
char[] t = {'a', 'b', 'c'};
if(s.equals(t))
System.out.println("pareil");
else
System.out.println("pas pareil");
Abordons maintenant la notion d’objet.
J’ai beaucoup entendu la définition suivante : “Un objet est l’instance d’une classe.”
Eh bien c’est faux ! Enfin, disons plutôt que c’est partiellement vrai.
En Java, un objet est soit l’instance d’une classe, soit un tableau. Cette nuance est importante parce que cela signifie que les tableaux aussi héritent de la classe Object. Ils peuvent donc aussi utiliser la méthode clone() par exemple.
Pour en revenir aux types de variables, les variables de type référence permettent de désigner des objets. Pour ceux qui connaissent le langage C, ces variables sont en fait des pointeurs vers ces objets, c’est-à-dire que cette variable ne contient pas l’objet lui-même mais l’adresse mémoire à laquelle l’objet est stocké. Par conséquent, 2 variables de type référence peuvent pointer vers le même objet. Le code suivant va vous expliquer ce concept qui s’appelle l’aliasing :
char[] t1 = {'a', 'b', 'c'};
char[] t2 = {'a', 'b', 'c'};
char[] t3 = t2;
System.out.println(t1 == t2); //false
System.out.println(t2 == t3); //true
Ici, t1 et t2 ne sont pas égaux car ils contiennent chacun une adresse mémoire différente, tandis que t2 et t3, eux, pointent vers le même objet.