IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Passage de paramètre


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Par défaut Passage de paramètre
    Bonjour tout le monde;

    D'après ce que j'ai lu java utilise le passe de paramètre par copie de référence, par exemple pour passer un objet en paramètre à une méthode elle lui passe une copie de la référence et non pas la référence, est ce qu'il y a qlq qui sait la raison de cela?

    merci à l'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Quelle est la finalité de la question ?

    J'avais fait un petit test pour voir si ça pouvait fonctionner comme le passage de pointeurs en C, et il s'est avéré que oui, mais dans le cas du passage 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    public class Test {
     
        public void maSuperFonction (MonAutreTest t) {
            t.setX(1);
            t.setY(2);
        }
     
        public static void main (String[] args) {
     
            MonAutreTest t2 = new MonAutreTest();
     
            System.out.println("---------------");
            System.out.println("x: "+t2.getX()+", y: "+t2.getY()); // affiche x: 0, y: 0
            test.maSuperFonction (t2);
            System.out.println("x: "+t2.getX()+", y: "+t2.getY()); // affiche x: 1, y: 2
            System.out.println("---------------");
     
        }
    }
     
     
    class MonAutreTest {
        private int x, y;
     
        public void setX (int x) {
            this.x = x;
        }
     
        public int getX () {
            return x;
        }
     
        public void setY (int y) {
            this.y = y;
        }
     
        public int getY () {
            return y;
        }
    }
    Mais je suis pas certain qu'il s'agisse de ta question ^^°

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par Lamy20 Voir le message
    une copie de la référence et non pas la référence
    Dans le sens C++ien, quand on passe une référence, on passe en fait un pointeur. C'est bien entendu une copie du pointeur original, pas l'adresse qui pointe sur le pointeur (ie. un pointeur de pointeur).

    C'est la même chose en Java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public static void maFonctionChangeRef(Object obj) {
            Object initialFuncObj = obj;
            obj = new Object();
     
            System.out.println("initialFuncObj == obj : "+(initialFuncObj ==obj));
        }
        public static void main(String[] args) {
     
            Object oMain = new Object();
            Object o1 = oMain;
            maFonctionChangeRef(o1);
            System.out.println("o1 == oMain : "+ (oMain == o1) );
        }
    Te retournera:

    - 'false' pour , (initialFuncObj == obj), normal on a affecté un nouvel object à obj.

    - 'true' pour (o1 == oMain) car ce qu'a modifié maFonctionChangeRef() est la référence obj, qui est locale à la fonction. Pas la référence qu'on lui a passé en paramètre au moment de l'appel (à savoir o1 dans le contexte du main).

    Ca me paraît plutôt logique. Car au final o1 fait partie du contexte du main, et est donc sous sa responsabilité. Ce n'est pas au code maFonctionChangeRef de tripoter ce vers quoi pointe o1.

    Si toi tu veux pouvoir modifier o1, rien ne t'empêche de faire que maFonctionChangeRef() retourne une référence vers un Object.
    C'est alors dans le main que tu affecteras o1 = maFonctionChangeRef(o1).

    Exemple:
    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
     
        public static Object maFonctionChangeRef(Object obj) {
            Object initialFuncObj = obj;
            obj = new Object();
     
            System.out.println("initialFuncObj == obj : "+(initialFuncObj ==obj));
     
            return obj ;
        }
        public static void main(String[] args) {
     
            Object oMain = new Object();
            Object o1 = oMain;
            o1 = maFonctionChangeRef(o1);
            System.out.println("o1 == oMain : "+ (oMain == o1) );
        }
    Ce code, évidemment, te retournera deux fois 'false'.

    Mais je suis pas certain qu'il s'agisse de ta question ^^°
    Idem

Discussions similaires

  1. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58
  2. probleme lors du passage de paramètre
    Par maxmj dans le forum ASP
    Réponses: 4
    Dernier message: 18/11/2003, 00h15
  3. [XSL] Passage de paramètres à un template
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/06/2003, 13h28
  4. passage de paramètres
    Par pram dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/02/2003, 17h28
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo