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 :

Explications sur le passage de paramètres


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut Explications sur le passage de paramètres
    salut tout le monde;
    je voulais vous demander lors de passage d'un objet en paramètre d'une fonction en l'occurence un document XML; c'est l'objet qui est modifié ou bien une copie est crée et est modifié. je m'emmèle un peu les pinceaux entre référence et objet et passage par valeur.

    en PASCAL, il y a deux types de passage : passage par valeur et passage par variable. moi, ce que j'aimerai faire c'est un passage par variable. J'espère avoir était claire.

    merci d'avance pour vos réponse.

  2. #2
    Membre chevronné Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Par défaut
    Si je me trompe pas, pour un objet c'est par référence et une primitive par valeur.

  3. #3
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    Citation Envoyé par fasfousba Voir le message
    moi, ce que j'aimerai faire c'est un passage par variable. J'espère avoir était claire.
    Ca n'existe pas en Java : tu ne peux pas changer la référence d'un paramètre.
    Tu peux agir à l'intérieur de l'objet passé en paramètre, mais pas le faire pointer sur autre chose par exemple.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut
    d'abord merci d'avoir déplacé mon sujet dans un forum mieux adapter
    ensuite, donc si je comprend bien lorsque j'envoi un objet en paramètre à l'intérieur d'une fonction, il est automatiquement modifié.
    Je prend le cas d'une fonction récursive et que l'appel ce fait dans la méthode main alors l'objet que j'envoie en paramètre c'est celui qui sera modifié et que j'aurais à la fin.
    pas de possibilité de retrouver l'objet de départ. c'est ça?

  5. #5
    Membre chevronné Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Par défaut
    Tu peux le cloner si tu veux en garder un exemplaire, sinon il est modifié.

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par fasfousba Voir le message
    ensuite, donc si je comprend bien lorsque j'envoi un objet en paramètre à l'intérieur d'une fonction, il est automatiquement modifié.
    Je ne comprend pas ce que tu veux dire par là...



    En Java tous les passages de paramètres se font par copie :
    • Pour les types primitifs c'est une copie de la valeur.
    • Pour les objets c'est une copie de leurs références.



    Donc en gros :



    a++

  7. #7
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Citation Envoyé par fasfousba Voir le message
    d'abord merci d'avoir déplacé mon sujet dans un forum mieux adapter
    ensuite, donc si je comprend bien lorsque j'envoi un objet en paramètre à l'intérieur d'une fonction, il est automatiquement modifié.
    Je prend le cas d'une fonction récursive et que l'appel ce fait dans la méthode main alors l'objet que j'envoie en paramètre c'est celui qui sera modifié et que j'aurais à la fin.
    pas de possibilité de retrouver l'objet de départ. c'est ça?
    Euh ... non, c'est pas ça. L'objet passé est le même, mais tu ne peux pas modifier sa référence c'est tout.

    Pour t'en convaincre, exécutes ce code là :
    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.util.Random;
     
    class Person {
    	private static final Random random = new Random();
    	public int id = random.nextInt();
    }
     
    public class Test {
     
    	private void recursive(Person p) {
    		System.out.println("idHashCode="+System.identityHashCode(p)+", id="+p.id);
    		if (Math.random() < 0.1) {
    			return;
    		} else {
    			recursive(p);
    		}
    	}
     
    	public static void main(String[] args) {
    		new Test().recursive(new Person());
    		new Test().recursive(new Person());
    		new Test().recursive(new Person());
    	}
    }
    Le person passé en paramètre ne change pas (en terme de référence) mais aussi pour les champs internes.

    Mais si tu modifies un champ interne d'un objet passé en paramètre, ça va être visible pour tous ceux qui ont une référence vers cet objet. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void test(Person p){
    		p.id=-1;
    	}
     
    	public static void main(String[] args) {
    		Person p = new Person();
    		new Test().test(p);
    		System.out.println(p.id);//<--ça affiche bien -1
    	}
    Par contre ça ça n'a aucun effet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void test(Person p){
    		p = new Person();
    		p.id=-1;
    	}
     
    	public static void main(String[] args) {
    		Person p = new Person();
    		new Test().test(p);
    		System.out.println(p.id);//<--ça n'affiche pas -1
    	}
    [edit] Euh ... c'est un peu superflue après le post d'adiGuba

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut
    merci à vous deux. ça fait vraiment plaisir de voir la rapidité avec laquelle la réponse m'a été fourni.
    maintenant, c'est clair comme de l'eau de roche
    il ne me reste plus qu'une seule chose à dire RESOLU!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/12/2007, 12h07
  2. Passage de paramètre sur un événement
    Par GPZ{^_^} dans le forum Flash
    Réponses: 5
    Dernier message: 14/05/2007, 12h51
  3. Réponses: 7
    Dernier message: 10/05/2007, 17h23
  4. Besoin d'explication sur le passage d'arguments
    Par ChrOnOs83 dans le forum Flash
    Réponses: 3
    Dernier message: 16/11/2006, 11h23
  5. onchange sur un SELECT : passage de paramètre
    Par NikoBe dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/10/2006, 11h14

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