Java.Lang.Integer : Incrémentation
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:
1 2 3 4 5
|
modInt(int i) {
this.thread = new Thread(this, "modInt n° " + Integer.toString(i));
this.ID = i;
} |
Code:
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