Passage d'arguments par référence - utilisation d'argument en sortie

Passage d'arguments par référence - utilisation d'argument en sortie - Java - Programmation

Marsh Posté le 15-10-2002 à 09:02:20    

Y un truc que je comprend pas là. Je sens déja que ça va attirer les railleries, mais tant pis... :(  
En Java, les passages d'arguments à une méthode ne se font pas par copie de l'argument passé, mais par passage de la référence de l'argument passé lors de l'appel à la méthode.
Wow, g réussi à rendre compliqué ce truc tout bête moi ! :D
Enfin, bref, ceux qui connaissent m'auront compris, c déja ça... (dsl pour les autres !)
Donc logiquement, avec un tel fonctionnement, je devrais pas avoir le comportement qui j'ai ici :

Code :
  1. String strMessage = "valeur de départ";
  2. UneInstanceDUnTruc.UneMethode (strMessage);
  3. System.out.println (strMessage);


 
Sachant que UneInstanceDUnTruc.UneMethode modifie la valeur du paramètre reçu en : "nouvelle valeur", je devrais obtenir ça comme valeur à la fin. Non !?
Pourquoi ?
Comment pallier à ça, sachant que j'utilise déja la valeur de retour de UneMethode ?

Reply

Marsh Posté le 15-10-2002 à 09:02:20   

Reply

Marsh Posté le 15-10-2002 à 09:04:22    

montre le code de ta méthode pour voir...

Reply

Marsh Posté le 15-10-2002 à 09:05:10    

Tiens au fait, tu sais que les String ne sont pas modifiables ?

Reply

Marsh Posté le 15-10-2002 à 09:09:46    

lorill a écrit a écrit :

Tiens au fait, tu sais que les String ne sont pas modifiables ?




 
Ben oui, mais la JVM simule une modification par une copie.
Bref, on peut très bien faire ça :

Code :
  1. String test = "voila";
  2. test = "voulou";
  3. System.out.println (test);


 
"voila" et "voilou" sont 2 String différentes, n'empêche que test est une référence vers la String qui m'interresse. C tout ce qu'on demande !

Reply

Marsh Posté le 15-10-2002 à 09:11:14    

El_Gringo a écrit a écrit :

 
 
Ben oui, mais la JVM simule une modification par une copie.
Bref, on peut très bien faire ça :

Code :
  1. String test = "voila";
  2. test = "voulou";
  3. System.out.println (test);


 
"voila" et "voilou" sont 2 String différentes, n'empêche que test est une référence vers la String qui m'interresse. C tout ce qu'on demande !




 
Oui mais non.
 
 
1. test est un poiteur vers "voila".
2. test devient un pointeur vers "voilou"
une réaffectation n'a rien a voir avec une modification !

Reply

Marsh Posté le 15-10-2002 à 09:12:09    

Et en passant, si tu te contente de reaffecter dans ta méthode en esperant que ca marche, tu as un probleme avec le concept de variable locale.

Reply

Marsh Posté le 15-10-2002 à 09:12:18    

Sinon, il y a l'attribut final qui pourrait peut-être résoudre ton pb (j'ai peur de pas bien avoir compris). C'est l'"équivalent" du const en C++, yavé d'ailleurs eu un topic enflamé la-dessus ...

Reply

Marsh Posté le 15-10-2002 à 09:14:20    

lorill a écrit a écrit :

montre le code de ta méthode pour voir...




 
Bah là c un truc d'exemple que g pondu de toute façon.
Le code de la méthode dans mon exemple, ça serait :[cpp]// Rend "true" si la contenu de strMessage à été changé.
public boolean (String _strMessage)
{
   if (_strMessage != null)
      _strMessage = "nouvelle valeur";
 
   return (true);
}

Reply

Marsh Posté le 15-10-2002 à 09:15:05    

bobuse a écrit a écrit :

Sinon, il y a l'attribut final qui pourrait peut-être résoudre ton pb (j'ai peur de pas bien avoir compris). C'est l'"équivalent" du const en C++, yavé d'ailleurs eu un topic enflamé la-dessus ...




 
Je sais, c'était moi l'instigateur du topic ! :D
EDIT : D'ailleurs t'as pas bien suivi, vu qu'on avait finalement dit que final n'est pas équivalent au const du C++ :D


Message édité par El_gringo le 15-10-2002 à 09:15:58
Reply

Marsh Posté le 15-10-2002 à 09:16:38    

lorill a écrit a écrit :

Et en passant, si tu te contente de reaffecter dans ta méthode en esperant que ca marche, tu as un probleme avec le concept de variable locale.




 
Donc, le paliatif, ça serait par exemple d'utiliser un StringBuffer ?


Message édité par El_gringo le 15-10-2002 à 09:16:52
Reply

Marsh Posté le 15-10-2002 à 09:16:38   

Reply

Marsh Posté le 15-10-2002 à 09:17:10    

El_Gringo a écrit a écrit :

 
 
Bah là c un truc d'exemple que g pondu de toute façon.
Le code de la méthode dans mon exemple, ça serait :[cpp]// Rend "true" si la contenu de strMessage à été changé.
public boolean (String _strMessage)
{
   if (_strMessage != null)
      _strMessage = "nouvelle valeur";
 
   return (true);
}




 
C'est bien ce que je craignais.
Bon, en Java, tous les parametres sont passés par valeur. A part pour les types de base (int, float, boolean...), tout est une réference vers une instance d'Object. Donc en fait ce que tu passes c'est la valeur d'une référence.  
 
Apres tu changes modifie une variable locale, mais tu modifie pas l'objet pointé, tu affecte juste une nouvelle référence a ton pointeur.

Reply

Marsh Posté le 15-10-2002 à 09:18:27    

El_Gringo a écrit a écrit :

 
 
Donc, le paliatif, ça serait par exemple d'utiliser un StringBuffer ?




 
peut importe l'objet, ce qu'il faut c'est ne pas affecter un autre objet a ta variable, et modifier celui qui est référencé. Donc oui, avec un StringBuffer c'est possible, mais pas comme tu l'as ecrit.

Reply

Marsh Posté le 15-10-2002 à 09:21:09    

lorill a écrit a écrit :

 
 
peut importe l'objet, ce qu'il faut c'est ne pas affecter un autre objet a ta variable, et modifier celui qui est référencé. Donc oui, avec un StringBuffer c'est possible, mais pas comme tu l'as ecrit.




 
Mais, dans mon cas, ça par exemple, c ok alors j'pense :

Code :
  1. public boolean (StringBuffer _strbMessage)
  2. {
  3.    _strbMessage.setLength (0);
  4.    _strbMessage.append ("nouvelle valeur" );
  5.   return (true);
  6. }

Reply

Marsh Posté le 15-10-2002 à 09:21:54    

lorill a écrit a écrit :

 
 
peut importe l'objet, ce qu'il faut c'est ne pas affecter un autre objet a ta variable, et modifier celui qui est référencé. Donc oui, avec un StringBuffer c'est possible, mais pas comme tu l'as ecrit.




 
Hé, merde, j'avais pas vu : je suis pas un boulet !!!! :(

Reply

Marsh Posté le 15-10-2002 à 09:23:07    

El_Gringo a écrit a écrit :

 
 
Mais, dans mon cas, ça par exemple, c ok alors j'pense :

Code :
  1. public boolean (StringBuffer _strbMessage)
  2. {
  3.    _strbMessage.setLength (0);
  4.    _strbMessage.append ("nouvelle valeur" );
  5.   return (true);
  6. }






ouais, comme ca ca marche, vu que tu modifies l'objet.

Reply

Marsh Posté le 15-10-2002 à 09:28:51    

J'la refait :  

Hé, merde, j'avais pas vu : je suis pas un boulet !!!!

Reply

Marsh Posté le 15-10-2002 à 09:30:05    

El_gringo t'es trop fort  [:xp1700]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 15-10-2002 à 09:32:31    

El_Gringo a écrit a écrit :

J'la refait :  

Hé, merde, j'avais pas vu : je suis pas un boulet !!!!






 
Ben si, quand même. Mais c'est pas par rapport a ce topic, comme le sais sans doute :D

Reply

Marsh Posté le 15-10-2002 à 09:32:42    

DarkLord a écrit a écrit :

El_gringo t'es trop fort  [:xp1700]  




 
...à propos de la question que j'viens de poser ?

Reply

Marsh Posté le 15-10-2002 à 09:33:43    

lorill a écrit a écrit :

 
 
Ben si, quand même. Mais c'est pas par rapport a ce topic, comme le sais sans doute :D




 
Ben... par rapport à quoi alors ? l'histoire du type qui voulais virer les pubs de son applet !?

Reply

Marsh Posté le 15-10-2002 à 09:34:45    

DarkLord a écrit a écrit :

El_gringo t'es trop fort  [:xp1700]  




 
tu m'emmerde Dark, tu m'emmerdes... :sarcastic:

Reply

Marsh Posté le 15-10-2002 à 09:35:04    

El_Gringo a écrit a écrit :

 
Ben... par rapport à quoi alors ? l'histoire du type qui voulais virer les pubs de son applet !?




 
 :jap:  
 
Edit: si ca peut te rassurer, lis ca :
http://forum.hardware.fr/forum2.ph [...] at=&print=


Message édité par lorill le 15-10-2002 à 09:36:40
Reply

Marsh Posté le 15-10-2002 à 09:38:42    

lorill a écrit a écrit :

 
 
 :jap:  
 
Edit: si ca peut te rassurer, lis ca :
http://forum.hardware.fr/forum2.ph [...] at=&print=




 
En fait, ça m'énervait de voir écrire : "c'est inderdit donc il faut pas le faire !"
J'trouve ça un peu nul.
Le pire c que j'avais fini par dire que sur ce coup là j'avais tord ! :(

Reply

Marsh Posté le 15-10-2002 à 09:39:48    

El_Gringo a écrit a écrit :

 
 
tu m'emmerde Dark, tu m'emmerdes... :sarcastic:  




 
 [:titprem]  :hello:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 15-10-2002 à 09:41:17    

lorill a écrit a écrit :

 
 
 :jap:  
 
Edit: si ca peut te rassurer, lis ca :
http://forum.hardware.fr/forum2.ph [...] at=&print=




 
Donc tu me juges pas complètement con !? génial ! J'en ai de la chance moi !

Reply

Marsh Posté le 15-10-2002 à 09:42:26    

[:titprem]

Reply

Marsh Posté le 15-10-2002 à 09:43:59    

El_Gringo a écrit a écrit :

 
 
En fait, ça m'énervait de voir écrire : "c'est inderdit donc il faut pas le faire !"



pourtant, à première vue, comme ca, ca parait plutot logique ...

Reply

Marsh Posté le 15-10-2002 à 09:47:26    

benou a écrit a écrit :

 
pourtant, à première vue, comme ca, ca parait plutot logique ...




 
Bah oui, mais bon... Selon moi le droit c pas une science exacte, ça sert de base pour établire un respect mutuel, c'est tout. C'est pour ça que de juges existent et que c pas de ordinateurs qui déterminent qui aura quelle peine !
Enfin bon, on est sur un forum de programmation là, j'vais arrêter ça là...

Reply

Marsh Posté le 15-10-2002 à 09:49:09    

El_Gringo a écrit a écrit :

 
Bah oui, mais bon... Selon moi le droit c pas une science exacte, ça sert de base pour établire un respect mutuel, c'est tout. C'est pour ça que de juges existent et que c pas de ordinateurs qui déterminent qui aura quelle peine !



 
putain le truc qui a RIEN à voir :D


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 15-10-2002 à 09:52:51    

DarkLord a écrit a écrit :

 
 
putain le truc qui a RIEN à voir :D




 
Ouais, c bien ce dont j'avais peur sur un forum de programmation...
C'est pas parce qu'on sait programmer qu'on sais réfléchir sur autre chose !
 :D

Reply

Marsh Posté le 15-10-2002 à 09:55:39    

réfléchir  :sarcastic:  
 
bon allez laisse tomber


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 15-10-2002 à 10:05:18    

El_Gringo a écrit a écrit :

 
 
Ouais, c bien ce dont j'avais peur sur un forum de programmation...
C'est pas parce qu'on sait programmer qu'on sais réfléchir sur autre chose !
 :D  




c'est marrant, j'ai du mal à apprécier un smiley quand juste avant on vient de me traiter de gros con ... :/
 
"el_gringo" donc, je retiens.

Reply

Marsh Posté le 15-10-2002 à 10:08:34    

benou a écrit a écrit :

 
c'est marrant, j'ai du mal à apprécier un smiley quand juste avant on vient de me traiter de gros con ... :/
 
"el_gringo" donc, je retiens.




 
Ha non, j'en ai marre, j'veux pas m'faire des ennemis moi !
Benou c'était pas pour toi que j'ai dit ça, c'est pour Dark qui disait que ce que je dit n'a rien à voir.
Je disais ça juste histoire d'êter désagréable avec lui !
'Faut pas l'prendre pour toi !
 :hello:

Reply

Marsh Posté le 15-10-2002 à 10:11:31    

El_Gringo a écrit a écrit :

 
 
Ha non, j'en ai marre, j'veux pas m'faire des ennemis moi !
Benou c'était pas pour toi que j'ai dit ça, c'est pour Dark qui disait que ce que je dit n'a rien à voir.
Je disais ça juste histoire d'êter désagréable avec lui !
'Faut pas l'prendre pour toi !
 :hello:  




ouais, enfin en l'occurence, c'est les gars de prog que tu insultais. et puis tu sais, si dark est con, y a pas beaucoup de mecs inteligents ...
 
bref, t'aurais mieux fait de rien dire du tout.


Message édité par benou le 15-10-2002 à 10:11:53
Reply

Marsh Posté le 15-10-2002 à 10:11:58    

ah t'étais désagréable là? Faudra t'entrainer alors :D
 
 :hello:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 15-10-2002 à 10:14:44    

DarkLord a écrit a écrit :

ah t'étais désagréable là? Faudra t'entrainer alors :D




moi ca m'ennerve les gens qui pensent que ceux qui ne pensent pas comme eux sont cons.
C'est typiquement le genre de mec qui devient chef  :o

Reply

Marsh Posté le 15-10-2002 à 10:15:24    

benou a écrit a écrit :

 
moi ca m'ennerve les gens qui pensent que ceux qui ne pensent pas comme eux sont cons.
C'est typiquement le genre de mec qui devient chef  :o  




 
absolument :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 15-10-2002 à 10:18:24    

DarkLord a écrit a écrit :

ah t'étais désagréable là? Faudra t'entrainer alors :D
 
 :hello:  




 
G pas l'habitude !

Reply

Marsh Posté le 15-10-2002 à 10:19:38    

Ces temps, j'ai l'impression que tout l'monde est contre moi.
J'm'en vais...
évidement, que ça vous réjouisse, vous accable ou que vous vous en tapiez, je reviendrais.

Reply

Marsh Posté le 15-10-2002 à 10:20:02    

PS : j'ai pas l'âme d'un chef !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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