
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

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