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 d'argument par référence (String et StringBuffer)


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 53
    Par défaut Passage d'argument par référence (String et StringBuffer)
    Voilà, je programme en C et C++ et je dois passer à Java.
    Je suis en peeuut pperdu pour ce qui se passe en mémoire.

    J'ai le code suivant :

    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
     
    public class StringObject {
     
     
     
        void addString(String s1, String s2) {
            s1 = s1 + s2;
            // Marque 3
        }
     
        public static void main(String[] args) {
     
            StringObject ref = new StringObject();
            String mystring = "Give ";
            StringBuffer mybuffer = new StringBuffer("Give ");
            // Marque 1
     
     
            mystring = mystring + "me six ";
            mybuffer.append("me six ");
            // Marque 2
     
            ref.addString(mystring, "lines");
            mybuffer.append("lines");
            // Marque 4
     
            System.out.println(mystring);
            System.out.println(mybuffer);
        }
    }
    La sortie est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Give me six
    Give me six lines
    Si je comprend ce qui arrive à StringBuffer (occurence : mybuffer) je ne comprend pas ce qui arrive à mystring :

    Particuliérement cette ligne :
    ref.addString(mystring, "lines");

    Que représente ref ? Que fait AddString au niveau de la mémoire ? Que ce qui est accessible au niveau de marque 3.

    S'il n'ajoute pas "lines" c'est parce que la fonction ne retourne rien et que addString est call by value ?

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    La méthode addString() (et plus globalement le code que tu as posté) illustre le principe des classes et objets immuables dont fait partie la classe String .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 53
    Par défaut
    Je ne vois pas comment la méthode addString pourrait faire qqch vu que ref n'est pas "prévu" pour acceuillir une String.

    Donc pour moi, le résultat s1 = s1 + s2; est forcément perdu lors du retour de la fonction.

    Je n'arrive pas comprendre sur quoi "ref" pointe lorsque on fait
    ref.addString(mystring, "lines");
    En java les paramètres "lines" et mystring sont copié lors de l'appel (comme en C) ?

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Par défaut
    Bonsoir,

    Les paramètres de la méthode ne sont pas copiés. Ils sont passés par référence, ce qui explique que la modification de ces objets dans la méthode ne se perd pas.

    Bon courage.

  5. #5
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Citation Envoyé par fullbright Voir le message
    Les paramètres de la méthode ne sont pas copiés. Ils sont passés par référence.
    En fait, c'est faux. En Java, tout passage de paramètre se fait par valeur... Leur référence est passé par valeur, donc si à l'intérieur de ta méthode tu modifies les propriétés de ton objet, ces dernières resteront en effet modifiées lors du retour de la méthode. Par contre, si dans ta méthode tu changes la référence de ton objet (en faisant un new), rien ne sera modifié au retour de la méthode.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 53
    Par défaut
    Alors je comprend pas pourquoi à la fin du programme mystring contient "give me six" et non pas "give me six lines".

    Si en java, le paramètre passé à une fonction peut ête modifié mystring devrait contenir "give me six lines" ?

    Je nage un peu...

Discussions similaires

  1. Passage d'argument par valeur / référence
    Par ezrider dans le forum C#
    Réponses: 17
    Dernier message: 05/04/2013, 05h18
  2. Conteneurs STL : passage d'arguments par référence
    Par bolhrak dans le forum SL & STL
    Réponses: 0
    Dernier message: 26/09/2007, 20h54
  3. Passage d'arguments par référence
    Par Xavier44214 dans le forum Langage
    Réponses: 5
    Dernier message: 12/04/2007, 14h08
  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