En Java, il existe deux types de base dans la JVM . 1) Types primitifs et 2) Types de référence. int est un type primitif et Integer est un type de classe (qui est une sorte de type de référence).
Les valeurs primitives ne partagent pas d'état avec d'autres valeurs primitives. Une variable dont le type est un type primitif contient toujours une valeur primitive de ce type.
int aNumber = 4;
int anotherNum = aNumber;
aNumber += 6;
System.out.println(anotherNum); // Prints 4
Un objet est une instance de classe créée dynamiquement ou un tableau. Les valeurs de référence (souvent juste des références) sont des pointeurs vers ces objets et une référence null spéciale, qui ne fait référence à aucun objet. Il peut y avoir de nombreuses références au même objet.
Integer aNumber = Integer.valueOf(4);
Integer anotherNumber = aNumber; // anotherNumber references the
// same object as aNumber
Toujours en Java, tout est transmis par valeur. Avec les objets, la valeur transmise est la référence à l'objet. Donc, une autre différence entre int et Integer en java est de savoir comment ils sont passés dans les appels de méthode. Par exemple dans
public int add(int a, int b) {
return a + b;
}
final int two = 2;
int sum = add(1, two);
La variable deux est passée en tant que type entier primitif 2. Alors qu'en
public int add(Integer a, Integer b) {
return a.intValue() + b.intValue();
}
final Integer two = Integer.valueOf(2);
int sum = add(Integer.valueOf(1), two);
La variable deux est passée comme référence à un objet qui contient la valeur entière 2.
@WolfmanDragon: passer par référence fonctionnerait comme suit:
public void increment(int x) {
x = x + 1;
}
int a = 1;
increment(a);
// a is now 2
Lorsque l'incrément est appelé, il transmet une référence (pointeur) à la variable a . Et la fonction d' incrémentation modifie directement la variable a .
Et pour les types d'objets, cela fonctionnerait comme suit:
public void increment(Integer x) {
x = Integer.valueOf(x.intValue() + 1);
}
Integer a = Integer.valueOf(1);
increment(a);
// a is now 2
Voyez-vous la différence maintenant?