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 :

Méthodes et passage par adresse


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Méthodes et passage par adresse
    Bonsoir,

    S'il vous plaît question de débutant en java
    je me demande pourquoi je ne peux pas affecter null ou une nouvelle instance à un objet malgré il est passé par adresse à ma méthode

    Example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	public static void killPerson(Person p)
    	{
    		p = null;
    	}
     
    	public static void main(String... args)
    	{
    		Person p = new Person("Me");
    		System.out.println(p.getName());
    		killPerson(p);
     
    		System.out.println(p.getName());
    	}
    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
     
    public class Person 
    {
    	String name;
     
    	public Person(String name)
    	{
    		this.name = name;
    	}
     
    	public String getName()
    	{
    		return name;
    	}
     
    	void setName(String name)
    	{
    		this.name = name;
    	}
    }
    Je trouve toujours que la méthode killPerson(p) ne peut pas affecter null à un objet ou même ne peut affecter un autre objet person à p (l'objet Person reste inchangé malgré son passage par la méthode) malgré on sait que le passage d'un objet (non pas type primitif) est toujours par adresse

    Merci beaucoup

  2. #2
    Membre actif Avatar de fastdeath124
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Août 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Août 2011
    Messages : 117
    Points : 200
    Points
    200
    Par défaut
    Dans la méthode main, si p devient null après l'appel de la méthode killPerson alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(p.getName());
    va lancer NullPointerException.
    Concernant l'attribut name, pourquoi ne pas le mettre "private"?

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci pour la réponse
    Oui je veux que ça lance NullPointerexception
    Tout simplement c'est un example illustratif que j'ai fais pour vous faire comprendre ce que je veux demander
    Supposant qu'au lieu de p = null il ya p = new Person("Not me")
    Donc je veux que p pointe sur une nouvelle Personne

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Ben Aissa Marouen Voir le message
    Bonsoir,

    S'il vous plaît question de débutant en java
    je me demande pourquoi je ne peux pas affecter null ou une nouvelle instance à un objet malgré il est passé par adresse à ma méthode
    Parce que rien n'est jamais passé par adresse en java, tout est passé par valeur. En l'ocurrence tu obtiens dans ta méthode une copie de la référence vers ton instance de Personne, jamais tu ne saura changer la référence dans l'appelant, tu pourra juste interagir avec l'instance qui t'es passée.

  5. #5
    Membre actif Avatar de fastdeath124
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Août 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Août 2011
    Messages : 117
    Points : 200
    Points
    200
    Par défaut
    Pour ajouter plus de détails au commentaire de tchize, si au lieu de faire tu modifies le nom, le changement sera effectué dans la méthode main. Mais la référence ne pas être modifiée:
    "si l'argument est une instance, c'est sa référence qui est passée par valeur. Ainsi, le contenu de l'objet peut être modifié, mais pas la référence elle-même." - François Bonneville

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/12/2006, 17h46
  2. passage par adresse
    Par gloubig dans le forum C++
    Réponses: 1
    Dernier message: 20/05/2006, 06h35
  3. Passage par valeur / passage par adresse
    Par jeje99 dans le forum C++
    Réponses: 13
    Dernier message: 16/02/2006, 10h29
  4. passage par adresse
    Par cari dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/02/2006, 11h33
  5. [Debutant(e)]passage par adresse?
    Par cap2fosse dans le forum Langage
    Réponses: 4
    Dernier message: 24/09/2004, 10h05

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