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

Langage Java Discussion :

Recuperer des adresses


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut Recuperer des adresses
    Bonjour a tous et a toute
    Je voudrai recuperer l'adresse d'une variable -chaine- et je ne sais plus comment.
    Si mes souvenirs sont bons en C on fait
    int C= nom et le type de la variable et le printf nous renvoie l'adresse.
    En java comment fait on ???


    En vous remerciant a l'avance

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    En Java, on ne le fait pas. La notion d'addresse est gérée par la JVM, tu n'y a pas accès...

    Pourquoi as tu besoin de l'addresse mémoire d'un objet ?

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    Bonjour et d'abord merci pour ta reponse tres rapide

    En fait c'etait pour une demonstration, pour une personne qui hier m'a demander de comparer deux chaines de caracteres.
    if(chaineA==chaineB),
    Je lui ai dit que cette methode comparait les adresses et pas nessecairement les objets, par ailleur j'avais appris dans un lointain passe que le new String("") renvoie l'adresse d'un objet.
    En lui disant que l'on comparait des adresses le mieux aurait ete une demo.
    Par contre l'ideal pour comparer deux instances d'objets - chaine- c'etait d'utiliser les methodes compareTo et surtout la methode equals.

    Cordialement

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    En fait, je viens de lire quelque chose qui pourrait t'intéresser.

    Sur les JVM de Sun, la méthode hashCode() d'Object renvoie l'adresse mémoire de l'Objet. Donc si tu es sur la bonne JVM et que la méthode hashCode n'a jamais été redéfinie, tu peut récupérer l'addresse mémoire.

    Il faudrait voir si String redéfinit la méthode hashCode() ou non.

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Par défaut
    Hier j'ai pense immediatement a la methode hashcode mais je l'ai tres mal utilise.
    Et donc ca marche comme je veux aujourd'hui
    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String a ="Ernest";
    	String b = "Ernest";
     
    	System.out.println("Adresse de a "+a.hashCode()+"et adresse b "+b.hashCode() );
    Resultat
    Adresse de a 2084070565et adresse b 2084070565
    Et encore merci les amis j'ai pas vue qu'il y a eu plusieurs reponses.
    Je vais tacher d'utiliser identityHashcode que je ne connaissais pas.


  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par smutmutant2003
    Hier j'ai pense immediatement a la methode hashcode mais je l'ai tres mal utilise.
    Et donc ca marche comme je veux aujourd'hui
    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String a ="Ernest";
    	String b = "Ernest";
     
    	System.out.println("Adresse de a "+a.hashCode()+"et adresse b "+b.hashCode() );
    Resultat
    Adresse de a 2084070565et adresse b 2084070565
    Et encore merci les amis j'ai pas vue qu'il y a eu plusieurs reponses.
    Je vais tacher d'utiliser identityHashcode que je ne connaissais pas.

    Utiliser le hashCode() pour comparer les adresses, ça n'est pas correct, car en théorie, a.equals(b) ==> a.hashCode() == b.hashCode().
    Donc rien que le fait que a et b soient logiquement égaux suffit à rendre leur hashCode identique, et donc même s'ils ont des adresses différentes...

    La seule méthode (dans le sens "manière", pas méthode java) est de comparer avec ==.
    Avec cependant pour les String un cas particulier, c'est que "a"=="a" renvoie true (plus généralement, toutes les chaînes déclarées dans le code source et qui représentent la même chaine sont physiquement égales).
    Par contre new String("a") == new String("a") return false

  7. #7
    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,


    Tu peux utiliser "l'identity hashCode" qui identifie de manière unique chaque objet en mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int identity = System.identityHashCode( objet );
    En général ce nombre correspond à l'adresse mémoire de l'objet utilisé par la JVM (mais ce n'est pas une obligation et cela peut dépendre de l'implémentation de la JVM).

    a++

    [edit]
    Citation Envoyé par wichtounet
    Il faudrait voir si String redéfinit la méthode hashCode() ou non.
    Nos post se sont croisé
    Bien sûr que String redéfinit hashCode() ! Sinon on ne pourrait pas utilisé de String dans les Map

    System.identityHashCode() qui retourne la même chose que la méthode hashCode() de base

  8. #8
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par adiGuba
    Nos post se sont croisé
    Bien sûr que String redéfinit hashCode() ! Sinon on ne pourrait pas utilisé de String dans les Map
    Aie, avais pas pensé

    Citation Envoyé par adiGuba
    System.identityHashCode() qui retourne la même chose que la méthode hashCode() de base
    Ok, donc ça dépend juste de la JVM alors ?

  9. #9
    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
    Citation Envoyé par wichtounet
    Ok, donc ça dépend juste de la JVM alors ?
    Oui : cela permet de distinguer deux objets au sein d'une même exécution.
    Mais cela ne correspond pas forcément à l'adresse mémoire (même si c'est le cas dans les JVM de Sun)

    a++

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/07/2010, 09h02
  2. [VB6] récuperation des propriétés d'un fichier exe
    Par ulrick dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/03/2004, 00h08
  3. [langage] Récupérer des Warning ??
    Par armada dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 16h45
  4. [statusbar] recuperer des infos d'un autre prog
    Par noyax dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 20/12/2002, 15h52
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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