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 d'un object en argument


Sujet :

avec Java

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut Passage d'un object en argument
    Bonjour à tous,

    j'aurais besoin d'un petit éclaircissement au niveau du passage d'argument entre fonction.
    Java passe les arguments par valeur , donc quand il sagit d'un objet il passe sa référence par valeur.
    Ce qui veut dire que :

    -Si je passe un type primitif , le modifie dans la fonction , il ne sera pas modifié là ou la fonction à été appelé.

    -En revanche si je passe un objet, je le modifie dans la fonction , la valeur de la référence est modifié et donc l'objet initiale aussi juste ?

    Pour confirmer celà j'ai fait ceci :

    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
    public class Main {
    	public static void main(String[] args) {
    		Point point1 = new Point(0, 0);
    		Object x = new String("vide");
    		Essai essai = new Essai();
     
    		System.out.println("x1 = "+point1.x+" y1="+point1.y);
    		System.out.println("x = "+x);
    		System.out.println("Essai = "+essai.nom);
    		System.out.println("Appel fonction");
    		test(point1,x,essai);
    		System.out.println("x1 = "+point1.x+" y1="+point1.y);
    		System.out.println("x = "+x);
    		System.out.println("Essai = "+essai.nom);
    	}
     
    	public static void test(Point arg1, Object arg3,Essai arg4)
    	{
    		arg1.x = 100;
    		arg1.y = 100;
    		arg3 = "Test";
    		arg4.nom = "modifié";
    	}
     
    }
     
    class Essai
    {
    	public String nom = "";
    	public Essai(){}
    }
    ce qui me donne le résultat suivant :
    x1 = 0 y1=0
    x = vide
    Essai =

    Appel fonction

    x1 = 100 y1=100
    x = vide
    Essai = modifié
    Donc l'objet Point est bien modifié , tout comme l'objet Essai par contre un type Object lui ne change pas tout comme un String.

    Pourquoi ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    Bonjour,

    Pour les String, il faut savoir que les string sont immutables, c'est la valeur et non la référence qui est passée si je me souviens bien.

    Pour Object j'ai des gros doutes donc je préfère ne rien dire
    MigouW

    La seule bataille perdue d'avance est celle que l'on refuse de livrer.


    Pensez au tag
    Ma réponse vous a été utile, votez plus 1 sur le message.
    Ma réponse est hors sujet, votez moins 1 sur le message.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par grunk Voir le message
    Donc l'objet Point est bien modifié , tout comme l'objet Essai par contre un type Object lui ne change pas tout comme un String.

    Pourquoi ?
    Ces deux classes sont immutables. Elles n'ont aucune variable membre à la fois non privée et non finale, et aucun mutateur.
    On ne peut même pas essayer de les modifier, il n'existe aucune syntaxe pour. Dans le code que tu montres ici, tu n'as pas essayé de modifier le moindre Object ni la moindre String.

    Concernant la ligne :

    arg3 n'est pas un membre d'un objet, c'est une variable locale. La modifier ne modifie pas d'objet.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    En java, le passage d'objet en paramètre d'une méthode se fait par copie de référence.

    Dans ton exemple, les objects point1 et arg1 sont deux références distantes qui pointent vers le même objet. Donc lorsque tu vas faire des modifications dans ta méthode test sur l'objet arg1, alors lorsque tu sors de ta méthode, l'objet référencé par la variable point1 se trouvera donc forcément modifié également (car il s'agit en fait du même objet).

    Par contre, si tu modifies ta référence, dans ta méthode test, alors en sortant, il n'y aura pas d'impact sur ton objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	public static void test(Point arg1, Object arg3,Essai arg4)
    	{
     
    		arg1 = new Point(500,500) ; // tu changes la référence
    		arg1.x = 100;
    		arg1.y = 100;
     
    		arg3 = "Test";
    		arg4.nom = "modifié";
    	}

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/05/2007, 14h38
  2. passage d'une methode avec argument
    Par skanderb dans le forum JSF
    Réponses: 27
    Dernier message: 27/04/2007, 17h36
  3. Passage d'une String[] en argument.
    Par Empty_body dans le forum Langage
    Réponses: 3
    Dernier message: 08/03/2007, 14h41
  4. [C#] Passage d'une méthode en argument
    Par Husqvarna dans le forum C#
    Réponses: 8
    Dernier message: 15/11/2006, 12h54
  5. Passage d'une classe en argument a glut
    Par black.out dans le forum C++
    Réponses: 5
    Dernier message: 08/11/2006, 19h21

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