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

Vue hybride

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

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Par défaut Passage par référence
    Bonjour à tous , j'ai besoin d'éclaircissement sur le passage par référence en Java .
    J'ai cru comprendre qu'en Java le mode transmission par défaut est la référence .
    Donc pour tester cela , j'ai ecrit la classe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class outil {
     
         public void test (String mot)
         {
          mot = "coucou2";
          }
    }
    J'ai ensuite créer une page jsp suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    outil monoutil = new outil();
    String mot = "coucou";
    monoutil.test(mot);
    out.println(mot);
    vu que le passage est par reference , l'affichage devrait être :
    pourtant non , cela m'affiche :
    quelqu'un peut m'expliquer ?

  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,


    Il n'y a pas de passage par référence en Java, mais uniquement par copie !

    Mais contrairement aux C++, on ne manipule pas directement des objets mais des références. Donc on effectues des copies de la référence.

    Si tu viens du C/C++ cela s'apparente plus à un passage par adresse...

    a++

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Bonjour à tous , j'ai besoin d'éclaircissement sur le passage par référence en Java .
    J'ai cru comprendre qu'en Java le mode transmission par défaut est la référence .
    Non.
    En java, l'utilisation des objets ce fait toujours par référence.
    Mais le passage des paramètres d'une méthode se fait toujours par copie(comme en C d'ailleurs).

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Le code suivant illustre bien ça :


    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
     
    public class Outil {
     
         private String mot;
     
         public static void test (Outil outil) {
             outil.mot = "Mot-difié"
         }
     
         public static void test2 (Outil outil) {
             outil = new Outil();
             outil.mot = "Mot-tus"
         }
     
         public String getMot () {
             return this.mot;
         }
     
         public void setMot (String mot) {
             this.mot = mot;
         }
     
         public String toString() {
            return this.mot;
         }
     
    }
    Et l'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Outil monoutil = new Outil();
    String mot = "coucou";
    monoutil.setMot(mot);
    out.println(monoutil);
    Outil.test(monoutil);
    out.println(monoutil);
    Outil.test2(monoutil);
    out.println(monoutil);

  5. #5
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Pour expliquer le comportement de ton code, ici comme les autres l'ont très justement dit, tu travail sur une copie de référence, donc lorsque tu va affecter une nouvelle valeur, cette valeur va être affecté à la copie de ta première référence, donc lorsque tu dériseras utiliser celle que tu as passé à ta méthode, rien ne sera changé. Par contre si tu appel des opérations qui modifients l'état de l'instance dans le corp de ta méthode, les deux références pointant vers la même instance, l'état sera modifié que tu passe par l'une ou l'autre référence.

Discussions similaires

  1. Passage par référence
    Par e1lauren dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 01/09/2006, 12h59
  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