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 paramètre par valeur et référence


Sujet :

avec Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    983
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 983
    Points : 138
    Points
    138
    Par défaut passage paramètre par valeur et référence
    Bonjour,

    Voici le programme 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
    import java.io.*;
     
    public class test_passage{
    	public static void test(int a, int []t){
    	a=30; 
    	t[0]=100;
    	}// fin de méthode test
     
    	public static void main(String[]args){
    		int a= 2;
    		int[]t = new int[3];
    		for(int i=0; i<3;i++){
     
    		t[i] = 2 * i;}// fin de for 
    		System.out.println("avant test a vaut " + a);
    		System.out.println("avant test t vaut " + t[0] + " , " + t[1]+ " et " +t[2]);
     
    		test(a,t);
    		System.out.println("apres test t vaut " + t[0] +","+  t[1]+ " et " +t[2]);
    		System.out.println("apres test a vaut " + a);
     
    		}// fin de main
     
    		} // fin de classe
    Le résultat à l'affichage donne
    avant test a vaut 2
    avant test t vaut 0,2 et 4
    après test t vaut 100,2 et 4
    après test a vaut 2
    Il est expliqué que t est une variable structurée et que donc son passage est fait par référence( ou par adresse)Toutes les modifications effectuées sur "t" dans la méthode test sont effectives sur le "t" de la méthode main, puisq 'il s'agit du même tableau.

    "a" est une variable de type simple et son passage est fit par valeur.
    toutes les modifications effectuées sur "a" dans la méthide test n'ont aucun impact sur le "a" de la méthode main.


    En fait , si j'ai bien compris, quand le programme va appeler la méthode test
    le paramètre a aura pour valeur "2"
    En fait puisque le paramètre "a" aura pour valeur 2, l'affectation 2=30 , ne pourra pas se produire car 2 n'est pas l'adresse mémoire de la variable "a" mais sa valeur.
    pouvez vous me le confirmer.

    Avec mes remerciements.

    Cordialement.
    Nathalie

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Oui.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut
    Salut,
    En java, tous les paramètres sont passés par valeur. Lorsque une méthode est appelée de nouvelles variables locales sont créées et toute altération ne concernera que ces dernières.
    Les auteurs du livre Au coeur de java disent que certains programmeurs pensent à tort que les variables de types primitifs sont passées par valeur alors que les objets sont passés par référence. Pour cela ils donnent un contre-exemple, une méthode swap comparable à celle-ci:
    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
     
    public class Test{
      public static void main(String[] args){
      String x = "a";
      String y ="b";
      System.out.println("x="+ x + " y="+y);
      swap(x,y);
      System.out.println("x="+ x + " y="+y);
     
     
    }
     
    public static void swap(String s1, String s2){
     
       String tmp = s1;
       s1 = s2;
       s2 = tmp;
     
    }
     
    }
    Le résultat de ce code est:
    x=a y=b
    x=a y=b

    La méthode swap ne modifie pas le contenu stocké dans les variables x, y (des références mémoire) mais crée deux variables (disons x' et y') qui pointeront sur les mêmes emplacements mémoire pointés par x et y.
    En résumé, pour être plus clair:
    - Les variables de types primitifs ne pourront en aucun cas être modifiées par une méthode (pour pallier le problème on fait appel aux classes dites wrappers (enveloppe)).
    - Le contenu d'une variable de type objet (une référence mémoire) ne peut pas être modifié par une méthode pour qu'elle (la variable) fasse référence à un autre objet mais le contenu de l'emplacement mémoire référencé peut être modifié.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/01/2013, 15h08
  2. fonction:passage par valeur ou référence
    Par senvedgi dans le forum Débuter
    Réponses: 10
    Dernier message: 01/01/2012, 18h58
  3. [WD8] Passage de paramètre par valeur à une sub avec une dll .net
    Par didierbi dans le forum WinDev
    Réponses: 3
    Dernier message: 19/06/2009, 18h21
  4. Réponses: 36
    Dernier message: 06/03/2009, 12h00
  5. [VB.NET]Problème passage paramètre par référence
    Par biau dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/02/2008, 15h03

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