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 :

Du passage de string par référence


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Par défaut Du passage de string par référence
    Bonsoir,

    J'avais cru comprendre que les objets étaient passés par référence en Java, or avec le code suivant, on s'attend bien à ce que l'objet str soit modifié dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public static void main(String[] args) {
    		String str = new String("ma_string");
    		System.out.println("str is: " + str);
    		chgString(str);
    		System.out.println("str modified is: " + str);
    	}
     
    	public static void chgString(String string) {
    		System.out.println("str to modify in chgString() method is: " + string);
    		string = new String("string_modifiee");
    		System.out.println("str modified in chgString() method is: " + string);
    	}
    Mais le résultat est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     java -jar test.jar 
    str is: ma_string
    str to modify in chgString() method is: ma_string
    str modified in chgString() method is: string_modifiee
    str modified is: ma_string
    Quelqu'un pourrait-il m'expliquer ce qu'il se passe ?

    Merci bien.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 111
    Par défaut
    Pour garder la même référence il faut que ta méthode chgString() retourne la référence de l'objet en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static string  chgString(String string) {
    		System.out.println("str to modify in chgString() method is: " + string);
    		string = new String("string_modifiee");
    		System.out.println("str modified in chgString() method is: " + string);
                   return string;
    	}

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Par défaut
    En fait ce qu'il se passe c'est que tu ne remplaces pas l'espace mémoire associé à la variable String que tu as créé dans ta fonction main, tu en crées juste un nouveau.

    Ce qu'il faut comprendre c'est qu'une référence ce n'est pas l'endroit dans la mémoire où se trouve la valeur. Donc si tu veux modifier ton String de départ, tu fais comme te l'a dit yorgh1234.

    Et si on reprend ta phrase :

    J'avais cru comprendre que les objets étaient passés par référence en Java, or avec le code suivant, on s'attend bien à ce que l'objet str soit modifié dans le main :
    Tu dis en premier que les objets sont passés par référence, ce qui est vrai et après tu dis que str est un objet, donc tu connaissais la réponse inconsciemment .

    Ciao

  4. #4
    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
    Il faut comprendre surtout que la notion de référence en Java n'est pas du tout la même qu'en C++. Ce qu'on appelle référence en Java correspond plutôt à ce qu'on appelle un pointeur en C++(avec quelque restrictions).

    Les objets sont toujours manipulés par référence(au sens java), par contre le passage d'argument ne peut se faire que par copie.

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Par défaut
    D'accord !

    Merci à chacun pour vos éclaircissements !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut
    Alors pourquoi lorsque que j'ai le code ci-dessous , c'est bien ma liste qui est remplie et non pas sa copie dans la méthode remplissageListe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       JLISt myliste =  new JList();
       .........   
        remplissageListe(myliste);
          -------
     
       private void remplissageListe(JList liste )
       {
           Vector v = new Vector();
            for (int i=.....)
                v.add(......)
           liste.setListData(v);
           return  
        }

  7. #7
    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,
    Citation Envoyé par raf64flo Voir le message
    J'avais cru comprendre que les objets étaient passés par référence en Java
    Les objets sont passé par copie de la référence.

    a++

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

Discussions similaires

  1. Passage d'argument par référence (String et StringBuffer)
    Par dword2add dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 18/03/2008, 16h50
  2. [C#] passage de paramètres par référence
    Par SesechXP dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2006, 12h48
  3. [String]passage de String par reference?
    Par Snivel dans le forum Langage
    Réponses: 17
    Dernier message: 02/12/2005, 16h24
  4. [EJB] Passage des paramètres par référence
    Par salome dans le forum Java EE
    Réponses: 2
    Dernier message: 05/07/2005, 11h25
  5. Réponses: 3
    Dernier message: 19/05/2005, 10h46

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