Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1230 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Modification de variable passée en paramètre (question de noob)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Modification de variable passée en paramètre (question de noob)

n°960820
Luigi
Living's easy with eyes closed
Posté le 24-01-2005 à 15:42:50  profilanswer
 

Bonjour ! Problème de base, mais que je me pose pour la première fois depuis que je code en java.
 
De ce que j'ai pu lire partout, en java le passage de paramètre se fait toujours par référence (sauf pour les types primitifs). Pourtant, le code suivant :
 

Code :
  1. public static void main(String[] args) {
  2.  Integer var = new Integer(15);
  3.  setTo2(var);
  4.  System.out.println(var);
  5. }
  6. public static void setTo2(Integer variable)
  7. {
  8.  variable = 2;
  9. }


 
Me donne comme résultat "15". Où est l'erreur ? :??:  
 
Merci d'avance :sweat:

mood
Publicité
Posté le 24-01-2005 à 15:42:50  profilanswer
 

n°960824
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 24-01-2005 à 15:46:38  profilanswer
 

Référence OK, mais sais-tu ce que sont les objets immutables ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°960825
Taz
bisounours-codeur
Posté le 24-01-2005 à 15:46:58  profilanswer
 

tu rebind juste variable vers un autre Integer. var ne change pas. De puis les Integer sont immutables. Donc même si c'était faisable, ça le serait pas :)

n°960827
sircam
I Like Trains
Posté le 24-01-2005 à 15:50:26  profilanswer
 

Taz a écrit :

Donc même si c'était faisable, ça le serait pas :)


Ca au moins, c'est clair  :D  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°960830
gedeon
Posté le 24-01-2005 à 15:50:42  profilanswer
 

En gros y'a pas d'erreur !

n°960831
Bidem
Posté le 24-01-2005 à 15:52:18  profilanswer
 

Ta méthode reçoit une copie de la référence passée en parametre donc à ce moment là, tu as 2 variables référençant le même objet.
 
Si tu fais en sorte qu'une des 2 variables référence un autre objet, cela n'implique pas que les autres variables changent.
 
Je sais pas si j'ai été clair...

n°960840
Luigi
Living's easy with eyes closed
Posté le 24-01-2005 à 16:03:29  profilanswer
 

bidem a écrit :

Ta méthode reçoit une copie de la référence passée en parametre donc à ce moment là, tu as 2 variables référençant le même objet.
 
Si tu fais en sorte qu'une des 2 variables référence un autre objet, cela n'implique pas que les autres variables changent.
 
Je sais pas si j'ai été clair...


 
Si j'ai bien compris, c'est la différence, en C, entre faire
 
void setTo2(int *variable) (ce que fait java ici)
 
et void setTo2(int **variable)
 
En C, la première solution me permet de modifier le contenu de variable, mais pas ici car Integer est immutable (on peut pas modifier son contenu).
 
Donc pour "modifier" un Integer, faut que je fasse pointer sur un autre integer, donc faut que je modifie ce vers quoi la référence pointe, donc faut utiliser la seconde solution qui n'existe pas en java.
 
J'ai compris ou je dis n'importe quoi ? :??: Et quelle est la solution alors pour faire cette opération ?

n°960850
benou
Posté le 24-01-2005 à 16:10:19  profilanswer
 

en java, tu ne peux pas modifier directement le paramètre, ou plutot, ca n'a pas d'incidence sur l'appelant. Par contre, tu peux modifier l'état de l'objet, c'est à dire appeler des méthodes qui vont modifier l'état interne (modifier ses attributs) des objets passés en paramètres.
 
ex :  

Code :
  1. public class MonInt {
  2.    private int val;
  3.    public MonInt(int val) {
  4.       this.val = val;
  5.    }
  6.    public int getVal() {
  7.       return val;
  8.    }
  9.    public void setVal(int val) {
  10.       this.val = val;
  11.    }
  12.    public String toString() {
  13.       return Integer.valueOf(this.val);
  14.    }
  15. }


Code :
  1. public static void main(String[] args) {
  2.         MontInt var = new MontInt(15);
  3.         setTo2(var);
  4.         System.out.println(var);
  5.     }
  6.    
  7.     public static void setTo2(MonInt variable)
  8.     {
  9.         variable.setVal(2);
  10.     }


---------------
ma vie, mon oeuvre - HomePlayer
n°960888
Luigi
Living's easy with eyes closed
Posté le 24-01-2005 à 16:53:29  profilanswer
 

Je pensais effectivement à ça (je le fais en général, c'est d'ailleurs pour ça que j'ai jamais eu à me poser cette question) mais bon je pensais pas que c'était indispensable dans ce cas...
 
Merci !  :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Modification de variable passée en paramètre (question de noob)

 

Sujets relatifs
variable path sous xpminWG, question de débutant
Question sur NATURAL JOINCSS variable
[C] Question tte conne sur une recursivité !PHP-récuperer paramètre issu URL
question sur le stockage des fichiers pour un site web[ColdFusion] recréer une variable par concaténation
[shell]recuperer la valeur d'une variable dans une variabe[EXCEL]Fonction fréquence et variable qualitative
Plus de sujets relatifs à : Modification de variable passée en paramètre (question de noob)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR