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

Collection et Stream Java Discussion :

ArrayList en parametre


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut ArrayList en parametre
    Bonjour,
    je débute avec java et je ne comprends pas pourquoi dans le code qui suit, mon tableau (ArrayList) "lettreHazard" est modifié.
    Je pensais qu'en donnant "lettreHazard" comme paramètre dans myFunction(charList), c'est le ArrayList "charList" qui allait être modifié sans toucher a "lettreHazard".
    Merci pour votre aide!

    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
    31
    32
    33
    34
     
    import java.util.ArrayList;
     
     
    public class essai {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ArrayList<String> lettreHazard = new ArrayList<String>();
     
            lettreHazard.add(0, "p");
            lettreHazard.add(1, "e");
            lettreHazard.add(2, "l");
            lettreHazard.add(3, "a");
            lettreHazard.add(4, "n");
            lettreHazard.add(5, "z");
            lettreHazard.add(6, "h");
            lettreHazard.add(7, "a");
            lettreHazard.add(8, "c");
     
            System.out.println("HAZARD-AVANT=" + lettreHazard);
            System.out.println(myFunction(lettreHazard));
            System.out.println("HAZARD-APRES=" + lettreHazard);
        }
        private static Boolean myFunction( ArrayList<String> charList){
            charList.remove(3);
            return true;
     
        }
     
    }
    retourne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    HAZARD-AVANT=[p, e, l, a, n, z, h, a, c]
    true
    HAZARD-APRES=[p, e, l, n, z, h, a, c]

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Par défaut
    Cette ligne:

    myFunction(lettreHazard)

    signifie que tu vas executer le code de la méthode myFunction en lui donnant la liste lettreHazard, c'est donc bien sur cette liste là que la logique de la méthode myFunction va s'appliquer.

    charList est une référence sur une liste, d'ailleurs tu devrais écrire

    myFunction(List<String> charList) et non
    myFunction(ArrayList<String> charList)

    Une méthode donnée ne peut pas voir les variables locales d'une autre méthode, ton charList tu aurais très bien pu également l'appeler lettreHazard.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Java considère deux catégories de types de données: les types primitifs (int, long, double, char, byte ...) et les objets (String, Long, Integer, List, ArrayList ...).

    Les paramètres de type primitif sont passé par copie.
    C'est à dire que la variable d'origine n'est pas impactée par le comportement de d'une méthode à laquelle cette variable a été communiquée.

    Les paramètres de type objet sont passés par référence.
    C'est à dire que toute modification faite sur un paramètre à l'intérieur d'une méthode impacte l'objet d'origine.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Citation Envoyé par Nudger Voir le message
    Java considère deux catégories de types de données: les types primitifs (int, long, double, char, byte ...) et les objets (String, Long, Integer, List, ArrayList ...).

    Les paramètres de type primitif sont passé par copie.
    C'est à dire que la variable d'origine n'est pas impactée par le comportement de d'une méthode à laquelle cette variable a été communiquée.

    Les paramètres de type objet sont passés par référence.
    C'est à dire que toute modification faite sur un paramètre à l'intérieur d'une méthode impacte l'objet d'origine.
    Merci,

    Poutant le code suivant transmet un objet (String) à la fonction, mais "test" n'est pas modifié?
    Tout ceci me parrait confu...

    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 test002 {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		String test = "Salut Les Enfants";
    		System.out.println(test);
    		System.out.println(myFunction(test));
    		System.out.println(test);
     
    	}
     
     
     
     
    	public static String myFunction(String phrase){
     
    		phrase = phrase.toLowerCase();
    		return phrase;
    	}
    }
    retourne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Salut Les Enfants
    salut les enfants
    Salut Les Enfants

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Parce que tu ne modifies pas l'objet String, tu te contentes d'assigner un autre objet String au paramètre.
    Ce n'est pas la même chose.

    Clairement, il y a une différence entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjet = unAutreObjet;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjet.modifierQuelqueChose();
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Recuperer parametre objet dans arraylist
    Par trist06 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 08/12/2009, 14h43
  2. ArrayList.Sort(IComparer) demande passage de parametre
    Par TheBlackReverand dans le forum VB.NET
    Réponses: 5
    Dernier message: 26/03/2008, 11h50
  3. ArrayList:Mettre en parametre dans une fonction
    Par skulled dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 24/11/2007, 11h15
  4. ArrayList en parametre de l'application
    Par piotrr dans le forum VB.NET
    Réponses: 6
    Dernier message: 28/09/2007, 23h31
  5. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15

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