Bien le bonjour!
Je suis ému, c'est mon premier post!
Venons-en au fait, une immense question me taraude actuellement, et je ne trouve pas de réponse dans mon ouvrage de référence... (il s'agit de "Thinking in Java", excellent bouquin au demeurant)
Supposons que j'instancie une classe
String monString = new String "Blabla";
Puis, je crée une autre référence vers cet objet
String monAutreString = monString
Les deux "choses" que j'ai crée sont des références vers l'objet en lui-même. Maintenant, j'opère une transformation radicale dans mon objet : par exemple, j'ajoute dix mille caractères à mon String
1 2 3
| for(int i=0; i<10000;i++){
monString = monString + "a";
} |
Là, j'ai un objet qui est très gros il est donc (sans doute) détruit et recrée à un autre endroit de l'espace mémoire, qui contient suffisament de place. (Peut-être que l'exemple du dessus n'est pas pertinent, mais il me semble possible de faire "grossir" la place qu'occupe un objet dans la mémoire, non?) (Je dis ça, parce que je pense qu'un String est une "LinkedList" : chaque caractère pointe vers le suivant, donc, mon exemple ne marche pas, l'objet n'est pas détruit puis recréé)
Je m'égare : une fois que mon objet est devenu énorme et est "délocalisé" dans un autre endroit de la mémoire, comment diable est-ce que mes références sont "averties" de ce changement? Est-ce qu'elle sont averties au moins? Parce que rien dans l'objet n'indique qu'il existe une référence qui pointe vers lui, non?
Pragmatiquement : J'ai un objet qui possède des références un peu partout. Est-ce que ces références pointeront toujours vers le bon objet, malgré tout ce que je peux lui faire subir? Et si oui, pourquoi?
Partager