rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[java] adresse d'une String

batmat, le vendredi 3 octobre 2003 à 15:45:59
Slt tout le monde !

Une ptite question pour les expérimentés du java : je cherche, je cherche mais je ne trouve pas (ce pays qui me va :-)), Y a-t-il un moyen d'afficher l'adresse d'une String en java ?

Normalement la méthode toString permet ça, mais elle est surchargée pour le type String pour afficher la chiane de caractère elle-même... Donc, ça marche po avec toString...

Qqn aurait une idée ? Si c pas possible, qqn peut-il être catégorique avec quelques explications ?

D'avance merci :)
@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?
Répondre à batmat  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 plop!, le vendredi 11 mai 2007 à 03:35:10
Ce n'est pas pour répondre à batmat (car le topic date de 2003), mais parce que je me posais la question, et que je n'ai trouvé que cette question sans réponse sur ce forum.
Aussi, le prochain qui cherchera (in y en a ?), trouvera sa réponse.

Il n'y a, en théorie, aucun moyen de connaître l'adresse mémoire d'un objet Java, sauf qu'il existe une fonction particulière :
System.identityHashCode(Object o)

Elle appelle la fonction native Object.hashCode() sur l'objet o (et non celle éventuellement surdéfinie). Et il se trouve qu'actuellement toutes les implémentations des JVM retournent l'adresse mémoire de l'objet.
Mais il peut exister quelque part dans ce bas monde (surtout maintenant qu'il est OpenSource) une JVM qui ne souhaite pas procéder ainsi. Et elle aurait raison, car voici le rapport de bug, et la documentation de SUN traitant du problème que cela soulève :
Rapport de bug : http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6321873
Documentation : http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.htm­l#hashCode()

Pour les flemmards, il en résulte que System.identityHashCode() ne peut pas servir à identifier un objet de façon unique (surtout sur un système 64 bits).

Une méthode pour identifier un objet de façon unique (car c'était là mon problème à la base), est de créer sa propre classe :

import java.math.BigInteger;

abstract public class Identifiable implements java.lang.Cloneable {
    private static BigInteger count = BigInteger.ZERO;
    private BigInteger ID = null;
    
    public String uniqueID() {
        if(ID == null) {
            ID = Identifiable.count
               = Identifiable.count.add(BigInteger.ONE);
        return getClass().getName()+"@"+ID;
    }
    
    public Object clone() throws OutOfMemoryError {
        Identifiable copy;
        try {
            copy = (Identifiable) super.clone();
            copy.ID = null;
            return copy;
        } catch (CloneNotSupportedException ex) {
            throw new InternalError(ex.toString());
        }
    }
}


A noter, qu'il suffirait même de retourner le BigInteger ID à la place d'une String, car ils sont tous uniques.
Cette classe résoud non seulement les problèmes de non unicité de System.identityHashCode() mais empêche également la réutilisation d'un identifiant déjà attribué à un objet détruit (par le GC).

plop!
Répondre à plop!
Logiciels pertinents trouvés dans les téléchargements
Télécharger Java Runtime Environment 6 Update 7Java Runtime Environment - Java Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des...Catégorie: Java
Licence: Open Source
Télécharger Streamripper    1.63.5Streamripper - De nombreux fichiers audio circulent sur Internet en streaming surtout via les radios internet. Alors pour en profiter au...Catégorie: Téléchargement
Licence: Freeware/gratuit
Télécharger Java Tools 0.35Java Tools - Java Tools est un IDE très léger pour la création, la compilation, l'exécution et le débogage des applications Java et des...Catégorie: Java
Licence: Freeware/gratuit
Télécharger Radio Recorder 1.4Radio Recorder - Radio Recorder est un outil permettant d'enregistrer les radios diffusées en streaming sur Internet, dans le plus grand...Catégorie: Podcasting/Streaming
Licence: Shareware
Plus de logiciels gratuits sur « [java] adresse d'une String »