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 :

Java mode de passage


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Java mode de passage
    J'ai une ambiguïté concernant le mode de passage des valeurs des paramètres pour une méthode (par valeur ou référence)
    ce que j'ai compris :
    +)les types primitifs sont toujours passés par valeur
    +)Un objet ça sera une copie de la référence donc c'est par valeur?(pas sur)
    et je n'ai pas saisi trop bien la notion d'immutabilité d'une classe.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par omar001 Voir le message
    J'ai une ambiguïté concernant le mode de passage des valeurs des paramètres pour une méthode (par valeur ou référence)
    ce que j'ai compris :
    +)les types primitifs sont toujours passés par valeur
    +)Un objet ça sera une copie de la référence donc c'est par valeur?(pas sur)
    Oui.

    - En Java les objets sont toujours des références vers ces objets.
    - En Java les paramètres sont toujours passés par valeur.
    => Donc dans le cas d'un objet passé en paramètre, c'est une référence vers cet objet qui est passée par valeur.

    Exemple, nous savons que les tableaux sont des objets :

    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
    /* modifie ce que contient le paramètre. */
    static void modif1(int[] tab) {
      tab[0] = 101;
      tab[1] = 102;
      tab[2] = 103;
    }
     
    /* assigne un autre objet à la variable paramètre. */
    static void modif2(int[] tab) {
      int[] newValues = {101, 102, 103};
      tab = newValues;
    }
     
    public static void main(String[] args) {
      int[] tab1 = {1, 2, 3};
      int[] tab2 = {1, 2, 3};
      modif1(tab1);
      modif2(tab2);
      // afficher les tableaux
    }
    On voit que modif1() peut changer le contenu du tableau qui lui est passé.
    Mais modif2() ne change pas le contenu du tableau. Elle assigne un autre tableau à la variable qui contenait le tableau qui lui était passé. Cela n'a pas d'effet utile.

    Citation Envoyé par omar001 Voir le message
    et je n'ai pas saisi trop bien la notion d'immutabilité d'une classe.
    Une classe immutable est une classe dont les instances ne changent plus après leur construction.

    Exemple, la classe String : on ne peut pas changer le contenu d'un objet String. On peut regarder les caractères qu'il y a dedans, avec charAt(), mais on ne peut pas les changer, il n'y a pas de setCharAt(), ni aucun set() d'ailleurs. Les méthodes de type replace() ne modifient pas la String concernée, à la place elles construisent un autre objet String et le renvoient en valeur de retour.

    Par contre, les classes List sont mutables : on peut ajouter, supprimer et remplacer des éléments d'une List.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Je me demande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class PassageParRefEtParVal {
     public static void Swap(Integer a,Integer b){
    Integer x=b;
    b=a;
    a=x;
    }
    public static void main(String args[]) {
    Integer a=1,b=2;
    System.out.println("a: "+ a + " b: "+ b);
    Swap(a,b);
    System.out.println("a: "+ a + " b: "+ b);
    }
    }
    exécution:
    a: 1 b: 2
    a: 1 b: 2

    Pourquoi les 2 variables ne se sont pas permutées?
    alors qu'on n'a pas fait une affectation à la référence.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par omar001 Voir le message
    alors qu'on n'a pas fait une affectation à la référence.
    ????

    etC'est quoi si c'est pas des affectations aux références ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Mode de passage des paramètres en java
    Par S_ami dans le forum Général Java
    Réponses: 3
    Dernier message: 29/04/2011, 23h29
  2. [Java Gui Builder] passage d'arguments XML en java
    Par Cha28 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 30/05/2008, 10h43
  3. Réponses: 22
    Dernier message: 07/03/2007, 10h00
  4. Java script + JSP : Passage de données
    Par Rastapwalu dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 12/12/2005, 15h58

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