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 :

En Java, c'est bien un passage par référence non ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Par défaut En Java, c'est bien un passage par référence non ?
    bonjour à tous,

    quelque chose m'échappe je crois, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer integer = null;
    Connection connexion = null;
    connexionSGBD(connexion, "/data/conf/connexionsJava.conf", integer);
    à la fin, connexion redevient null et integer redevient null aussi... alors que dans le fonction connexionSGBD, ils avaient pris une valeur non nulle

    quelqu'un a-t'il une idée svp ?

    merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Non : Java utilise uniquement un passage par copie...

    • Par copie de valeur pour les types primitifs
    • Par copie de la référence pour les "objets" (puisqu'on manipule une référence et non pas directement un objet)


    Donc ce comportement est tout à fait normal. (si besoin il y a plusieurs sujets sur le forum où tout cela est plus détaillé).

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Non : Java utilise uniquement un passage par copie...

    • Par copie de valeur pour les types primitifs
    • Par copie de la référence pour les "objets" (puisqu'on manipule une référence et non pas directement un objet)


    Donc ce comportement est tout à fait normal. (si besoin il y a plusieurs sujets sur le forum où tout cela est plus détaillé).

    a++
    je suis pas sûre de voir la différence entre un passage par référence et un passage par copie de référence :-/

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 17
    Par défaut
    Ben en fait la différence c'est quand tu définis un objet dans une fonction, à la fin de ta fonction ton objet est perdu.

    Une copie de référence car en java tout est pointeur en gros tu manipules jamais la donnée d'où la nuance.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par _LittleFlea_ Voir le message
    je suis pas sûre de voir la différence entre un passage par référence et un passage par copie de référence :-/
    Lorsque tu passes par références, tu manipules exactement le même espace mémoire entre la méthode appelante et la méthode appelée.

    Lorsque tu effectues un passage par copie, tu recopies la valeur des paramètres lors de l'appel de méthode, qui travaillera donc sur une espace mémoire différent.

    En clair lors d'un passage d'une référence par copie, tu manipule une nouvelle référence qui pointe vers le même objet. Si tu modifies l'objet cela impactera bien sûr le même objet que la référence d'origine. Par contre elle ne sera pas impacté par la modification de la référence elle même...


    En fait le passage par copie de la référence de Java est proche du copie par adresse du C/C++...

    C'est comme lorsque tu manipules deux références vers un même objet : tu peux changer la valeur de l'objet, mais pas associer un nouvel objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    StringBuffer buf1 = new StringBuffer("hello");
    StringBuffer buf2 = buf1; // copie de la référence et non pas de l'objet.
     
    buf2.append(" world !"); // modif de l'objet pointé par les deux référence
     
    // buf1 & buf2 pointent vers le même objet
     
    buf2 = new StringBuffer();
     
    // buf1 & buf2 point désormais vers des objets différents
    a++

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par _LittleFlea_ Voir le message
    je suis pas sûre de voir la différence entre un passage par référence et un passage par copie de référence :-/
    C'est parce qu'un passage par "copie de référence" ça ne veut rien dire. C'est passage par copie ou passage par référence, l'un ou l'autre.

    Or, en Java, les paramètres sont passés par copie.

    Tu confonds peut-être avec le fait qu'en Java, les objets sont toujours des références d'objet. Oui. Mais ces références sont quand même passées par copie.
    On ne peut pas modifier la référence, on peut modifier l'objet qui est référencé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Par défaut
    Merci pour vos réponses.

    Donc finalement, comment faire pour modifier mes objets ?

    merci

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Vu ton exemple, tu n'as pas besoin de les modifier, tu as besoin de les créer. Ils sont à null, donc ils n'existent pas.

    Tu devrais créer une classe simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class ConnectionInfo {
      public int integer;
      public Connection connection;
      public ConnectionInfo(int integer, Connection connection) {
        this.integer = integer;
        this.connection = connection;
      }
    }
    Ton EDI peut générer ça rapidement.

    Ensuite, tu t'en sers de sorte de faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ConnectionInfo info = connexionSGBD("/data/conf/connexionsJava.conf");
    int integer = info.integer;
    Connection connection = info.connection;
    Voilà comment ça marche. (Oui, c'est un peu lourd. Il manque une syntaxe pratique pour faire ça en Java.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Gui avec Java,c'est Bien ?
    Par deltaweb dans le forum Général Java
    Réponses: 4
    Dernier message: 24/12/2013, 14h52
  2. Passage par référence en java
    Par psycho_xn dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 10/12/2009, 15h26
  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