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

Langage Java Discussion :

question sur les valeurs de retour


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Par défaut question sur les valeurs de retour
    J'ai une question au combien importante! Je viens de remarg=quer que la boucle foreach:
    ne retourne pas l'élément du tableau mais une copie de celui ci.
    Ma question est donc, est:
    Lorsque une fonction nous retourne une valeur, est-ce une copie de l'élément ou bel et bien l'élément?
    Je pense que c'est une copie mais j'aimerai en être sur.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 57
    Par défaut
    une fonction retourne un pointeur vers un objet

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Par défaut
    donc par exemple:
    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
     
    class maclasse
    {
      int x;
     
      maclasse()
      {
        x=4;
      }
     
      public int getx()
      {
        return x;
      }
     
      public static void main(String[] arg)
      {
        maclasse classe = new maclasse();
        int y = maclasse.getx();
        y = 8;
        y = maclasse.getx();
        System.out.println(y);
      }
    }
    Je devrais bien voir à l'ecran 8? (si c'est bien une référence!)
    Car sinon je devrait avoir 4, non?

  4. #4
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    en faisant ca, tu fais une copie de la valeur de x. Dans ton cas, tu auras toujours la valeur x = 4.
    Ici tu fais
    y = x( = 4);
    y = 8;
    y = x( = 4);

    Pour mettre à jour la valeur de x, il te faut une méthode d'accès en écriture. genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void setX(int x) {
          this.x = x;
    }

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Par défaut
    Ok, c'est bien ce que je pensais, donc pour modifier un attribut de classe je doit toujours faire get, modif puis set?

  6. #6
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    si ce sont des membres public ou protected tu peux aussi directement modifier les valeurs.

    genre mais bon c'est pas super propre je trouve ...

  7. #7
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Si tu veux récupérer la valeur :
    get
    Si tu veux la modifier :
    set
    C'est tout simple
    En Java, il n'y a pas de notions de pointeurs ou de copie, on manipule des références sur les objets.
    Par exemple :
    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
     
    public class MyClass {
       private int myInt = 3;
       private MyType theType;
       public MyClass() {
          theType = new MyType();
       }
       public void setMyInt(int myInt) {
          this.myInt = myInt;
       }
       public int getMyInt() {
          return this.myInt;
       }
       public MyType getMyType() {
          return theType;
       }
       public static void main(String[] args){
          MyClass mc = new MyClass();
          // copie de Mytype dans un nouvel objet MyType (1)
          MyType mt = mc.getMyType();
          // modification du MyType de MyClass directement en appelant une de ses méthodes (2)
          mc.getMyType().theMethod();
       }
    }
    mt est une copie de l'objet theType présent dans MyClass (1)
    En revanche, la deuxième opération (2) appelle une méthode sur l'objet theType directement.

    PS : les noms de classes commencent par des majuscules (par convention)

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

Discussions similaires

  1. question sur les valeurs hexadecimal
    Par Ganondorf dans le forum Débuter
    Réponses: 13
    Dernier message: 24/09/2010, 17h15
  2. Question sur les valeur min et max des types ?
    Par doommick31 dans le forum Débuter
    Réponses: 4
    Dernier message: 13/04/2010, 17h35
  3. Question sur les fonctions avec "TABLE" comme param. de retour
    Par Alex01 dans le forum Développement
    Réponses: 2
    Dernier message: 17/11/2008, 09h26
  4. Réponses: 2
    Dernier message: 28/03/2008, 23h28
  5. Question sur les valeurs de SrcBlock et DstBlock
    Par Sensib dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/10/2006, 11h56

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