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 :

[String] Comment afficher la reference d'une String ?


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 35
    Par défaut [String] Comment afficher la reference d'une String ?
    Bonjour,

    pour des raison de debug dans un environnement ou je ne peux passer que par un système de traces, je cherche à afficher la référence d'un obejt String pour verifier ce que l'on manipule de bout en bout.

    Or je n'ai absolument pas trouvé le moyen de le faire.

    En effet, si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void main(String[] args) {
     
        String valeur1= new String();
        Object valeur2 = new Object(); 
        System.out.println("affichage valeur1 = " + valeur1);
        System.out.println("affichage valeur2 = " + valeur2);
    }
    j'obtiens le resultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    affichage valeur1 = 
    affichage valeur2 = java.lang.Object@107077e
    or j'aimerai bien pouvoir afficher le java.lang.String@???????

    Quelqu'un sait il comment faire ?

    Merci d'avance.

    [ Modéré par Bulbo ]
    Ajout des balises code
    Les Règles du Forum

  2. #2
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    Sauf erreur de ma part, il n'y a pas moyen...
    Les String sont des objets spéciaux créés dans un pool statique et dont le comportement est relativement éloigné de celui d'autres objets...ils n'ont donc pas vraiment de référence...

  3. #3
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Tu as essayé de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    super.toString();
    ((Object)s).toString();
    Il appellera explicitement la méthode toString d'Object, qui est celle que tu veux.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    NGY
    NGY est déconnecté
    Membre expérimenté
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Par défaut
    A tout hasard (pas testé), tu peux t'inspirer du code de toString() de la classe Object :

    Citation Envoyé par Dans la classe Object, Sun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public String toString() {
    	return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("affichage valeur1 = " + valeur1.getClass().getName() + "@" + Integer.toHexString( ((Object) valeur1).hashCode()));

  5. #5
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Citation Envoyé par xavlours
    Tu as essayé de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    super.toString();
    ((Object)s).toString();
    Il appellera explicitement la méthode toString d'Object, qui est celle que tu veux.
    Ca ne marchera pas ..

    On ne peut pas acceder a super sauf de l'interieur de la classe elle meme. Pour String ca va etre dur.

    Et caster en Object n'empechera pas l'interpreteur d'utiliser le type dynamique (donc String) pour l'objet s et donc le toString redefinit dans String.

    En passant par System.identityHashCode(s) peut-etre, je ne sais pas si c'est la reference de l'objet ou autre chose..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  6. #6
    NGY
    NGY est déconnecté
    Membre expérimenté
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Par défaut
    Hé oui !
    Donc ma solution ne marchera pas non plus (le hashCode() sera celui de la classe String).
    Donc essayer avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeur1.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(valeur1))

  7. #7
    Membre expérimenté Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    Citation Envoyé par bulbo
    En passant par System.identityHashCode(s) peut-etre, je ne sais pas si c'est la reference de l'objet ou autre chose..
    public static int identityHashCode(Object x)Returns the same hash code for the given object as would be returned by the default method hashCode(), whether or not the given object's class overrides hashCode(). The hash code for the null reference is zero.
    On aura donc un résultat similaire à celui de NGY...
    Ainsi dans l'absolu on aura bien qqchose qui s'affichera, mais ce ne sera pas représentatif de quoi que ce soit en mémoire...

  8. #8
    NGY
    NGY est déconnecté
    Membre expérimenté
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Par défaut
    Oui, mais ça affichera la même chose que ce qui est affiché avec un toString() sur un objet de la classe Object.
    C'est donc bien ce qui était demandé.

  9. #9
    Membre expérimenté Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    Citation Envoyé par NGY
    Oui, mais ça affichera la même chose que ce qui est affiché avec un toString() sur un objet de la classe Object.
    C'est donc bien ce qui était demandé.
    Tout à fait, c'est ce que voulais dire...
    Mais je ne sais plus pourquoi, j'avais cru qu'un poste faisait référence à la mémoire, d'où ma conclusion... (Les Lundi je devrais rester au lit !)

  10. #10
    NGY
    NGY est déconnecté
    Membre expérimenté
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Par défaut
    Ben non, t'as bien fait de te lever ce matin en fait :
    je cherche à afficher la référence d'un obejt String
    Maintenant, il faudrait savoir exactement ce que retourne un hashCode() sur un object :
    Citation Envoyé par La javadoc de hashCode()
    This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language
    Donc, hashCode() peut être l'adresse de l'objet en mémoire, mais c'est pas garanti pour toutes les JVM ...

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 35
    Par défaut
    Je pensais pas que ce serait impossible comme ca, en tout cas merci des reponses

Discussions similaires

  1. Comment comparer le contenu d'une string
    Par pierrot10 dans le forum Général Python
    Réponses: 2
    Dernier message: 22/09/2011, 07h29
  2. [1.1] Comment initialiser un XmlTextReader avec une String ?
    Par fregolo52 dans le forum Framework .NET
    Réponses: 2
    Dernier message: 18/09/2006, 14h11
  3. Réponses: 6
    Dernier message: 03/03/2006, 09h06
  4. [C#] Comment extraire les parties d'une string ?
    Par mrpowerboy dans le forum C#
    Réponses: 3
    Dernier message: 21/02/2006, 09h10
  5. [C#][TextBox] Comment obtenir la longeur d'une string
    Par l_ourson69 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/12/2005, 10h14

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