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

avec Java Discussion :

Passage par référence


Sujet :

avec Java

  1. #1
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 141
    Points : 128
    Points
    128
    Par défaut Passage par référence
    Bonjour,

    Voila j'ai une question toute bete si je fais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //class OBJ
    public int methode1(int param1, ArrayList param2){
    param.add(1);
    param.add(2);
    param.add(3);
    return 1;
    }
    ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ArrayList myArray = new ArrayList();
    int ret = obj.methode1(1,myArray);
    System.out.println("taille recu =>"+myArray.size())
    //la taille renvoyé est bien 3
    mais avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //class OBJ
    public int methode1(int param1, ArrayList param2){
    param2 = new ArrayList();
    param2.add(1);
    param2.add(2);
    param2.add(3);
    return 1;
    }
    La la taille renvoyé est de 0
    Si quelqu'un a une réponse a ceci, car je pensais que c'etait possible d'instancier un objet pris en paramètre ...

  2. #2
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Pour comprendre le problème que tu as, il faut comprendre le mecanisme de passage de paramètre de java.

    Pour ce qui est des types primitifs, tu les passes tout simplement par valeurs...

    Pour les objects, tu passes en fait un pointeurs vers l'objet.
    Quant tu fait que modifier les attributs de l'objets, il n'y a pas de soucis, l'objet pointé est bien celui que tu as passé, ton objet est donc bien modifié.

    Lorsque tu fais une nouvelle instanciation, ton pointeur ne pointe plus vers l'objet que tu as passé, mais vers la nouvelle instanciation. L'objet que tu as passé en paramètre existe toujours mais il n'est simplement plus accessible depuis ton pointeurs. De plus, lorsque tu sors de ta methode, la nouvelle instance est "perdu" car le seul moyen que tu avais pour acceder au nouvel objet était le pointeur, qui lui est bien local à la methode...

    Bref, une fois que tu es sortis de ta methode, et que tu manipules l'objet d'origine, celui ci n'as pas changé, c'est bien celui que tu a passé par paramaètre, pas celui qui a été créé dans la méthode.

    Pour t'aider à comprendre un peu mieux, il faut savoir que l'on dit souvent en java qu'il n'y a pas de pointeur, c'est faux. En java, on ne peut pas avoir accès directement aux pointeurs, mais en fait, il y en a partout. Tout variable qui n'est pas d'un type primitif est un pointeur vers l'objet qu'elle represente.

    J'espere avoir été un minimum comprehensible... si tu as des points que tu ne comprends pas, n'hesites pas a reposter...

    Pour bien comprendre tu peu aussi aller voir les cours et tutoriels pour Apprendre Java : http://java.developpez.com/cours/

  3. #3
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par benratti
    Pour t'aider à comprendre un peu mieux, il faut savoir que l'on dit souvent en java qu'il n'y a pas de pointeur, c'est faux. En java, on ne peut pas avoir accès directement aux pointeurs, mais en fait, il y en a partout.
    Pour étre plus précis : en java, il n'y a pas d'arithmétique de pointeurs


    Comment ça je cherche la petite bète ?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Citation Envoyé par afrikha
    Comment ça je cherche la petite bète ?
    Non, même pas... ca sert au moins à me rememorer ce terme que j'avais oublier...

  5. #5
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 141
    Points : 128
    Points
    128
    Par défaut
    Merci beaucoup de la réponse
    Effectivement c'etait assez débile comme question. J'arreterais de bosser plus tot la prochaine fois

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage par référence d'un buffer de type String
    Par youp_db dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2006, 10h51
  2. Passage par copie vs passage par référence
    Par bolhrak dans le forum C++
    Réponses: 11
    Dernier message: 20/08/2006, 23h37
  3. Réponses: 4
    Dernier message: 26/12/2005, 17h01
  4. Passage par référence
    Par difficiledetrouver1pseudo dans le forum Langage
    Réponses: 9
    Dernier message: 28/09/2005, 11h17
  5. Problème très rapide de passage par référence
    Par Noxexplorer dans le forum ASP
    Réponses: 2
    Dernier message: 23/06/2005, 10h02

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