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 :

Methode echange (Claude delannoy)


Sujet :

avec Java

  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut Methode echange (Claude delannoy)
    Bonjour ,

    Il y a un exemple que je ne comprends pas dans le livre de Claude delannoy :

    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
    public class Echange
    {
       public static void main (String args [])
       {
          int n = 10, p =20;
          System.out.println ("Avant Appel : "+ n + " " + p);
          Utilitaire.Echange(n, p);
          System.out.println ("Après Appel : " + n + " " + p);
       }
    }
     
    class Utilitaire
    {
         public static void Echange(int a, int b)                 // mettre static
         {
           System.out.println("Début Echange : " + a+ " " + b);
           int c;
           c = a;
           a = b;
           b = c;
           System.out.println ("Fin   Echange : "+ a + " " + b);
         }
     
     
    }
    Pourquoi les valeurs de n et p ne sont pas inversés après appel?
    Je ne comprends pourquoi l 'ont dit que java transmet toujours les informations par valeur

    merci

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Les arguments sont transmis par valeur à la méthode. En clair, juste avant l'appel de la méthode, une copie de n et p est transmise en arguments de méthode, et non les variables elles-même.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,
    Tu peux jeter un coup d'oeil sur ce thread pour en apprendre davantage.

  4. #4
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Bonjour ,

    Ok donc il s agit de copies et non des variables elles meme , mais ces copies occupent une autre case mémoire ?

    Pour les objets cela s' opére aussi par copie?

    merci

  5. #5
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,

    Ok donc il s agit de copies et non des variables elles meme , mais ces copies occupent une autre case mémoire ?
    Oui, et elles seront supprimées à la fin de l'appel de la méthode.

    Pour les objets cela s' opére aussi par copie?
    Oui mais il faut mettre à l'esprit qu'une méthode peut changer l'état d'un objet; c'est-à-dire le contenu de la mémoire référencée par l'objet et pas l'adresse mémoire stockée dans cette variable objet .

  6. #6
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    merci ,

    Mais je ne peux changer l adresse mémoire de la variable de type objet ?la référence est bien une case mémoire qui va pointer vers un objet définit par ses champs et méthodes d ' instance.

    imaginons je fasse ça :
    Un point étant défini par son abscisse et son ordonnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Point a = new Point ();
    ici la référence à l ' objet est bien a ????et l objet référence par a sera les variables d instances de la classe Point?

    Merci

  7. #7
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,
    Citation Envoyé par racoboss Voir le message
    merci ,

    Mais je ne peux changer l adresse mémoire de la variable de type objet ?la référence est bien une case mémoire qui va pointer vers un objet définit par ses champs et méthodes d ' instance.

    imaginons je fasse ça :
    Un point étant défini par son abscisse et son ordonnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Point a = new Point ();
    ici la référence à l ' objet est bien a ????et l objet référence par a sera les variables d instances de la classe Point?

    Merci
    a ne peut référencer qu'une seule instance de la classe Point à la fois. Si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Point a = new Point();
    Point b = a;
    alors a et b référenceront toutes les deux la même instance, par contre avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Point a = new Point();
    Point b = new Point();
    a et b pointeront sur deux instances différentes de Point qui possède chacune son propre espace mémoire.

  8. #8
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Pour les objets cela s' opére aussi par copie?
    Les objets sont passés par référence, il n'y a pas de copie.
    A l'intérieur de la méthode on agit donc directement sur l'objet passé en argument.

  9. #9
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,
    Citation Envoyé par Mushroom7 Voir le message
    Les objets sont passés par référence, il n'y a pas de copie.
    A l'intérieur de la méthode on agit donc directement sur l'objet passé en argument.
    Le sujet a déjà été abordé dans ce post avec un contre exemple.

  10. #10
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Je n'appelle pas ça un contre-exemple.

    En réalité tout est passé par valeur en java, sauf que dans le cas des objets c'est une copie de l'adresse de l'objet qui est passé.
    Comme tu l'as bien dit on a donc à l'intérieur de la méthode une variable locale qui pointe sur l'objet passé en paramètre et forcément si on fait une affectation on change simplement l'objet pointé par cette variable locale. Ce qui n'a aucun impacte sur l'objet d'origine bien évidemment.

    Mais toujours est-il que le terme de passage par référence est correcte, c'est bien une référence à un objet qu'on passe et non l'objet lui-même et donc si on modifie cette référence on ne modifie plus l'objet sur lequel elle pointe.

    Mais toutes ces précisions ne peuvent à mon avis qu'embrouiller un débutant inutilement. Ce qu'il est important de savoir c'est qu'une méthode peut modifier un objet alors qu'elle ne peut pas modifier une variable de type primitif.

  11. #11
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Citation Envoyé par Mushroom7 Voir le message
    si on fait une affectation on change simplement l'objet pointé par cette variable locale. Ce qui n'a aucun impacte sur l'objet d'origine bien évidemment.


    Mais toutes ces précisions ne peuvent à mon avis qu'embrouiller un débutant inutilement.
    Je ne suis pas tout à fait d'accord, ces précisions ne sont pas inutiles.
    Il s'agit certainement de l'un des principes du langage qu'on doit apprendre avant de disputer les fonctions avancées. De plus beaucoup de programmeurs C/C++ posent la même question dès les premiers contacts avec les méthodes java et beaucoup d'auteurs de livres le traitent dans les premiers chapitres.

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/04/2023, 19h30
  2. Avis livre c++ Claude delannoy
    Par niznele dans le forum C++/CLI
    Réponses: 2
    Dernier message: 06/03/2011, 13h27
  3. echange de données php/flash
    Par ramses83 dans le forum Flash
    Réponses: 8
    Dernier message: 19/08/2003, 00h50
  4. [Kylix] Echange de données entre fiches
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 01/07/2003, 12h34
  5. Methode de drcherche a l,interieur de basse de donner texte
    Par philippe V dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 03/12/2002, 11h20

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