Slu
comment faire pour passer qqchose par reference en java ?
par exemple pour une fonction avec un parametre int que je modifie dans la fonction et que je puisse la recuperer la ou j appelle la fonction.
thx @+
Slu
comment faire pour passer qqchose par reference en java ?
par exemple pour une fonction avec un parametre int que je modifie dans la fonction et que je puisse la recuperer la ou j appelle la fonction.
thx @+
Un type primitif ne peut être passé par référence.
Tu peux utiliser un tableau d'entier dans lequel tu mets ta valeur, et tu récupères en retour la valeur modifiée, mais ce n'est pas très propre :
ou renvoyer la valeur modifiée en retour de la méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public void incrementerEntier(int[] tableau) { tableau[0] += 1; }
ou passer par un objet dans lequel tu as un attribut de type int :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public int incrementerEntier(int entier) { return entier + 1; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Entier { public int i; public Entier(int i) { this.i = i; } } public void incrementerEntier(Entier entier) { entier.i += 1; }
Ah oui en fait j etais pas assez precis ... en fait pour c pour passer plusieurs int ... et donc en recuperer plusieurs ...
Inspire toi du 1er ou du 3ème exemple...
Salut,
Heu... Ce n'est pas possible puisque ces classes sont immuables...Envoyé par Gfx
a++
Je n'ai pas dit le contraire, mais il suffit de changer la reference :
C'est bien ce que l'on fait avec les String tout le temps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void incrementerEntier(Integer entier) { entier = new Integer(entier.intValue() + 462); }
Justement si tu changes la référence tu ne modifies pas l'objet passé en paramètre, mais tu crées un autre objet qui n'existera pas dans la méthode appellante...
Avec le code suivant :
On obtiens à l'affichage "0"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public static void incrementerEntier(Integer entier) { entier = new Integer(entier.intValue() + 462); } public static void main(String[] args) throws Exception { Integer entier = new Integer(0); incrementerEntier(entier); System.out.println(entier); }
La modification des objets passé par référence ne peut se faire que par des méthodes de la classe (setter ou autre).
Mais comme les types wrappers sont immuable ce n'est pas possible...
a++
ADI !
je passait par la, que veux tu dire quand tu dit qie :
je pensait que c'etait des objet comme les autres avec toutes leur proprieteEnvoyé par adiGuba
???
WDionysos
Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!
Comme quoi ca peut arriver à tout le mondeEnvoyé par Gfx
Moi je croyais qu'en Java tous les paramètres de méthodes étaient passés en valeur, même les références d'objets...
-"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
-"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".
Pieds d'argile (1996), Terry Pratchett 1948 - 2015
(trad. Patrick Couton)
En java tout est passé par référence au contraire. sauf les types primitifs. les types immuables sont d'ailleurs aussi passés par reference, mais vu qu'ils sont immuables... c'est un peu comme s'ils etaient passés par valeur... enfin, en raccourci
Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
"La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"
Dans ce cas on devrait pouvoir écrire des méthodes d'échange telles que par exemple :
Pour moi ceci confirme que toutes les variables sont passés par valeur, y compris celles contenant des références d'objets...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class Test { public static void swapStringBuffer(StringBuffer s1, StringBuffer s2){ StringBuffer temp = s1; s1 = s2; s2 = temp; } public static void main(String[] args) { StringBuffer s = new StringBuffer("toto"); StringBuffer s2 = new StringBuffer("tata"); System.out.println(s); //s vaut toto System.out.println(s2); //s2 vaut tata Test.swapStringBuffer(s,s2); System.out.println(s); //s vaut toujours toto System.out.println(s2); //s2 vaut toujours tata } }
Si je fais une erreur de raisonnement dites le moi hein, je veux juste comprendre, je prétends pas avoir raison...
-"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
-"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".
Pieds d'argile (1996), Terry Pratchett 1948 - 2015
(trad. Patrick Couton)
Je confirme, pour les objets, ce sont des copies des références qui sont passées.
Par contre ce n'est pas l'objet lui-même qui est passé à la méthode mais bien une référence donc ce n'est pas à proprement parler un passage par valeur.
Certes, c'est bien la référence d'objet qui est passé à la méthode.
Mais bon en java, une variable peut contenir soit une constante primitive (entier, caractère), soit une référence vers un objet.
Ce qui me fait dire que c'est du passage par valeur c'est que quand on utilise la variable dans une méthode, c'est une copie de son contenu qui est transmis ce qui explique que l'on puisse écrire des méthode d'altération d'un objet (puisque l'on possède une copie de la référence vers l'objet) mais pas des méthodes d'échange (objet ou type primitif) ou d'altération d'un type primitif.
-"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
-"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".
Pieds d'argile (1996), Terry Pratchett 1948 - 2015
(trad. Patrick Couton)
Oui je sais c'est ce que j'essaie d'expliquer dans mon message précédent, visiblement moins bien que toi je te l'accorde...
Mais moi j'appelle ça du passage par valeur.
Edit, tiens le message auquel j'ai répondu à disparu!
-"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
-"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".
Pieds d'argile (1996), Terry Pratchett 1948 - 2015
(trad. Patrick Couton)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager