![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
bulbo
Les objets sont passes par reference: c'est a dire que c'est la reference de l'objet qui est passe en parametre.
Faire:
1 2 3 4
| public void A(String maString)
{
maString = "toto";
} |
Cela remplace la reference pointee par maString par celle de l'objet "toto" mais ca ne peut pas changer la reference passee en argument de la methode.
Ainsi ce code
1 2 3 4
| String s = "tata";
System.out.println(s);
A(s);
System.out.println(s); |
Affichera 2 fois tata, la methode A n'a aucun moyen de modifier la reference contenue dans s, pour cela il aurait fallu passer en parametre l'adresse de la variable s, ce qui n'est pas possible en Java.
Bulbo
![:wink:](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
euh.. ok, je vois le truc, dans ce cas la ca devrait pouvoir fonctionner en utilisant une variable globale, initialisée a un endroit, et manipulée à un autre.
De plus, tu dis que "la methode A n'a aucun moyen de modifier la reference contenue dans s"
est ce que c'est valable pour n'importe quel objet ou est ce simplement valable pour les string ?
Derniere question :
J'ai besoin de ce mecanisme pour faire une methode recursive mettant a jour un path. Je pars de la fin du path, et m'arrete au moment ou j'arrive au repertoire Home. Mon code ressemble a ca :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
public void A(){
String s = new String();
B(s);
}
public void B(String valeur){
valeur = valeur + analyse();
if(condition respectee pour recursivite){
B(valeur);
}
} |
Or dans ce cas, la string valeur est bien mis a jour a chaque passage dans la méthode recursive, on construit bien
/test
puis
repertoire/test
puis
home/repertoire/test
du coup, le fait de faire l'affectation
valeur= valeur + analyse();
ne donne pas l'impression de faire une reaffectation. A moins que je ne me trompe.
Partager