Passage d'arguments par référence - utilisation d'argument en sortie - Java - Programmation
Marsh Posté le 15-10-2002 à 09:05:10
Tiens au fait, tu sais que les String ne sont pas modifiables ?
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 :
|
"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 !
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 :
|
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 !
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.
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 ...
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);
}
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 !
EDIT : D'ailleurs t'as pas bien suivi, vu qu'on avait finalement dit que final n'est pas équivalent au const du C++
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 ?
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.
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.
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 :
|
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 !!!!
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 :
|
ouais, comme ca ca marche, vu que tu modifies l'objet.
Marsh Posté le 15-10-2002 à 09:28:51
J'la refait :
Hé, merde, j'avais pas vu : je suis pas un boulet !!!! |
Marsh Posté le 15-10-2002 à 09:30:05
El_gringo t'es trop fort
Marsh Posté le 15-10-2002 à 09:32:31
El_Gringo a écrit a écrit : J'la refait :
|
Ben si, quand même. Mais c'est pas par rapport a ce topic, comme le sais sans doute
Marsh Posté le 15-10-2002 à 09:32:42
DarkLord a écrit a écrit : El_gringo t'es trop fort |
...à propos de la question que j'viens de poser ?
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 |
Ben... par rapport à quoi alors ? l'histoire du type qui voulais virer les pubs de son applet !?
Marsh Posté le 15-10-2002 à 09:34:45
DarkLord a écrit a écrit : El_gringo t'es trop fort |
tu m'emmerde Dark, tu m'emmerdes...
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 !? |
Edit: si ca peut te rassurer, lis ca :
http://forum.hardware.fr/forum2.ph [...] at=&print=
Marsh Posté le 15-10-2002 à 09:38:42
lorill a écrit a écrit : 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 !
Marsh Posté le 15-10-2002 à 09:39:48
El_Gringo a écrit a écrit : tu m'emmerde Dark, tu m'emmerdes... |
Marsh Posté le 15-10-2002 à 09:41:17
lorill a écrit a écrit : 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 !
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 ...
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à...
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
Marsh Posté le 15-10-2002 à 09:52:51
DarkLord a écrit a écrit : putain le truc qui a RIEN à voir |
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 !
Marsh Posté le 15-10-2002 à 09:55:39
réfléchir
bon allez laisse tomber
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 ! |
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.
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 !
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 ! |
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.
Marsh Posté le 15-10-2002 à 10:11:58
ah t'étais désagréable là? Faudra t'entrainer alors
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 |
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
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 |
absolument
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 |
G pas l'habitude !
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.
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 !
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 :
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 ?