Bonjour ou bonsoir,

Un objet de la classe Java.Lang.Integer est immuable.
Disons que l'on a un objet "i" qui est une instance de cette classe avec comme paramètre passer au constructeur l'entier 0.
Il est permis de faire : i++.
Est-il possible qu'en itérant cette opération x fois, le pointeur de cet objet change pour une autre instance qui contient donc l'entier x ? Si oui, pourquoi ?

Je vous pose cette question car j'ai fais une découverte bizarre :
J'ai une classe(appelé test contenant le main) qui a notamment un static objet Integer(qui contient le chiffre 0) : Static Integer i = new Integer(0);
J'ai une classe modInt qui implémente Runnable.
Code du constructeur : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
modInt(int i) {
	this.thread = new Thread(this, "modInt n° " + Integer.toString(i));
	this.ID = i;
}

Code du run() : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
for (int i = 1; i <= 200000; i++) {
	synchronized(test.i){
		test.i++;
	}
}
System.out.println("Dernière valeur enregistré :" + test.i);
Dans mon main, je crée 3 objet modInt et je les démarre avec (new modInt(1)).thread.start(), (new modInt(2)).thread.start() et (new modInt(3)).thread.start().
En toute logique, à la fin de l'execution des 3 objets, je devrais obtenir :
Dernière valeur enregistré : x(>0)
Dernière valeur enregistré : y(>200000)
Dernière valeur enregistré : 600000
Or je n'obtient pas 600 000. Cela veut dire qu'il y a un problème d'accès sur l'Integer i. Or j'y met un verrou dessus.
Donc soit le pointeur de i a changé et donc les modInt ne travaillent plus sur le même i ou alors je comprends pas..
Pourriez vous m'éclairer ?

Merci