[Java] Création de String

Création de String [Java] - Java - Programmation

Marsh Posté le 03-06-2004 à 08:19:05    

  Salut,
Lorsque l'on fait

Code :
  1. String s = str;


aucune string n'est crée en plus de str, on dit juste que s pointe sur la chaine pointée
par str, c'est ça ?
Donc je comprends pas pourquoi ce code compile mais ne mofifie pas la chaine passée en paramètre
 

Code :
  1. public void modifyString(String s)
  2. {
  3. s = s.substring(0, 3); //juste un exemple
  4. }


 
et s n'est pas modifiée (quand je l'affiche après l'appel à modifyString par exemple).
Est-ce une raison de portée de variable (cantonnement à l'environnement local de la fonction) ?
 
merci
   ANT

Reply

Marsh Posté le 03-06-2004 à 08:19:05   

Reply

Marsh Posté le 03-06-2004 à 08:31:48    

Reply

Marsh Posté le 03-06-2004 à 09:55:31    

* soupir * je regrette les bons vieux &...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 04-06-2004 à 13:05:39    

Oui en effet, je savais bien que les String ne sont pas modifiables, mais dans mon exemple, en fait je change juste vers quoi pointe s, c'est pas bon, y a un truc qui m'échappe ?
Donc comme dans le lien que tu m'as filé, je réaffecte un nouvel objet (read-only) à s. Et pourquoi quand je sors de la fonction s pointe toujours sur l'ancien objet ?
merci

Reply

Marsh Posté le 04-06-2004 à 13:12:14    

http://www.cassioto.blogger.com.br/tanga.jpg
 
 
et accessoirement va lire le topic d'nraynaud sur les string


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-06-2004 à 14:03:19    


parce que les paramètres des méthodes sont locaaux aux méthodes ... il ne s'agit pas de la même variable que celle avec laquelle tu as fait l'appel. C'est uen autre variable qui pointe vers le même objet => si tu fais pointer la variable locale à ta méthode vers un autre objet, ca ne change rien pour la variable externe.
 
C'est du au fait qu'en java le passage des paramêtres se fait par copie de valeur (copie de l'adresse mémoire de l'objet pointé, dans le cas d'objet). un peu comme en C ... comme les paramêtres de type IN en ADA, comme les paramêtres qui n'ont pas de '&' en C++ (sauf que là c'est carrément l'objet qui est dupliqué)


Message édité par benou le 04-06-2004 à 14:17:34

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-06-2004 à 14:06:17    

euh [:zozo] encore, pour la énième fois, confondage là. ça se passe comme ça uniquement parce que c'est des String.
passe un autre type à ta methode modifyString et il sera toujours "modifié" a la sortie de cette methode

 
 
 [:pepe le putois]


Message édité par the real moins moins le 04-06-2004 à 14:32:03

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-06-2004 à 14:10:10    

the real moins moins a écrit :

euh [:zozo] encore, pour la énième fois, confondage là. ça se passe comme ça uniquement parce que c'est des String.
passe un autre type à ta methode modifyString et il sera toujours "modifié" a la sortie de cette methode


non, il change juste la variable la

Reply

Marsh Posté le 04-06-2004 à 14:19:13    

the real moins moins a écrit :

euh [:zozo] encore, pour la énième fois, confondage là. ça se passe comme ça uniquement parce que c'est des String.
passe un autre type à ta methode modifyString et il sera toujours "modifié" a la sortie de cette methode


tu vas pas recommencer !!! :o
 
si tu affecte une autre valeur à la variable (s = "toto" ) ca ne changera JAMAIS rien pour la variable externe.
 
Par contre, bien sur, dans le cas d'objets qui ne sont pas immuables, si tu appelles dessus des méthodes qui changent l'état de l'objet, ca affectera aussi la variable externe puisque c'est l'objet pointé qui est modifié !


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-06-2004 à 14:31:34    

ha oui [:psychokwak]
 
et donc si dans ça methode il faisait unObjetNonImmuable = autreInstance en sortie, il se retrouverait quand meme avec l'ancienne instance?
[:psychokwak]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-06-2004 à 14:31:34   

Reply

Marsh Posté le 04-06-2004 à 14:34:23    

the real moins moins a écrit :

ha oui [:psychokwak]
 
et donc si dans ça methode il faisait unObjetNonImmuable = autreInstance en sortie, il se retrouverait quand meme avec l'ancienne instance?
[:psychokwak]

alloooooo stackframe, passage de paramètres, tout ça ...


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 04-06-2004 à 15:04:03    

the real moins moins a écrit :

il faisait unObjetNonImmuable = autreInstance en sortie, il se retrouverait quand meme avec l'ancienne instance?


oui [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-06-2004 à 16:21:20    

the real moins moins a écrit :


et donc si dans ça methode il faisait unObjetNonImmuable = autreInstance en sortie, il se retrouverait quand meme avec l'ancienne instance?


mais t'as fumé quoi aujourd'hui toi ?

Reply

Marsh Posté le 04-06-2004 à 16:22:09    

ça va n'insistez pas [:sisicaivrai]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-06-2004 à 16:24:26    

lorill a écrit :

mais t'as fumé quoi aujourd'hui toi ?

http://www.pg.hu/images/logo_always_tampon.gif
 
?


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed