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 par valeur


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 157
    Par défaut Passage par valeur
    Bonjour à tous

    j'ai deux petit programmes, j'arrive pas à comprendre la différence entre les résultats , malgré qu'ils suivent la même logique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void f(int n){
    n = -10;
    }
    public static void main(String[] args){
    int n = 1;
    f(n);
    System.out.println(n);
    }
    ce programme affiche 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void f(int[] w){ // 
    w[0] = -10;
    }
    public static void main(String[] args){
    int[] t = new int[5]; //
    t[0] = 1;
    f(t);
    System.out.println(t[0]);
    }
    par contre ce dernier affiche -10

    malgré qu'ils suivent la même logique , les résultats sont différents

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Hello,

    Un int est un type primitif et est passé par valeur.
    Un tableau est un objet, et est passé par (valeur de la) référence.

    En fait en java, tout est toujours passé par valeur. Mais comme une référence stocke en réalité la valeur d'un "pointeur" vers un objet, cela se comporte comme si les objets étaient passés par référence. Ce qui explique qu'une action sur une valeur primitive ne soit pas répercutée vers l'appelant, tandis qu'une action sur un objet pointé par une référence le soit

  3. #3
    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
    Pour le dire autrement, la différence c'est que :
    - dans le premier cas, tu as fait un = sur ton paramètre (n)
    - dans le deuxième cas, ce n'est pas sur ton paramètre (w) que tu as fait un =
    C'est sur son contenu (w[0], sa première case)

    Assigner une variable n'a pas d'effet particulier sur ce que cette variable contenait avant.
    Assigner quelque chose au contenu d'un objet, change cet objet.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ceci, pour compléter, t'aurais affiché 1 aussi et est similaire à ton premier cas en termes de logique (on change le contenu de la variable w et non pas le contenu de l'objet qui y est référencé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void f(int[] w){ // 
    w= new int[] {-10};
    }
    public static void main(String[] args){
    int[] t = new int[5]; //
    t[0] = 1;
    f(t);
    System.out.println(t[0]);
    }

Discussions similaires

  1. Passage par valeur
    Par NairodDorian dans le forum Fortran
    Réponses: 3
    Dernier message: 22/04/2008, 17h00
  2. Réponses: 12
    Dernier message: 26/01/2008, 20h23
  3. [Débutant] Passage par valeur d'un objet Corba
    Par peaceinpal dans le forum CORBA
    Réponses: 1
    Dernier message: 29/05/2006, 20h15
  4. Passage par Valeur
    Par xc78370 dans le forum Langage
    Réponses: 8
    Dernier message: 20/03/2006, 23h21
  5. Passage par valeur / passage par adresse
    Par jeje99 dans le forum C++
    Réponses: 13
    Dernier message: 16/02/2006, 10h29

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