Announcement

Collapse
No announcement yet.

Ausgabe der Referenz

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ausgabe der Referenz

    Hallo,

    gibt es eine Möglichkeit, die Referenz einer Referenzvariablen auszugeben, z.B. über System.out.println()?

    Holger

  • #2
    Hallo,

    wozu braucht man denn sowatt - ganz platt gesagt ?

    Zum Zeitpunkt der Instanzierung hat jede Variable eine Adresse:

    //Objekt instanzieren
    BO_XYZ t_objBO_XYZ = new BO_XYZ();
    System.out.println(t_objBO_XYZ);

    //Referenzvariable anlegen und Speicheradresse ausgeben
    BO_XYZ t_objBO_XYZ_Referenz = new BO_XYZ();
    System.out.println(t_objBO_XYZ_Referenz);

    //Referenz zuweisen
    t_objBO_XYZ_Referenz = t_objBO_XYZ;

    //Adresse des referenzierten Objektes ausgeben
    System.out.println(t_objBO_XYZ_Referenz);

    Greetz
    BratMaxx

    Comment


    • #3
      Warum? Ist einfach persönliche Neugierde, zumal ich darüber nirgends etwas lesen konnte.

      Allerdings stimmt Dein Beispiel nicht so ganz. Es wird beim System.out.println() nicht die Referenzadresse, sondern der Hashcode ausgegeben. Und die Haschcodes sind oder können unterschiedlich sein:

      String s1 = "Hallo";
      String s2 = new String("Hallo");

      System.out.println("s1 " + s1.hashCode());
      System.out.println("s2 " + s2.hashCode());

      if(s1==s2)
      System.out.println("gleich");
      else
      System.out.println("ungleich");

      Liefert als Ergebnis z.B. :
      s1 = 69490486
      s2 = 69490486
      ungleich

      Also werden beim Vergleich nicht die Hashcodes verglichen (die in dem Beispiel gleich sind), sondern die Referenzen ( die deshalb unterschiedlich und von den Hashcodes verschieden sein müssen)

      Comment


      • #4
        Die hash codes sind in diesem Bespiel deshalb gleich, weil String equals() und hashCode() überschreibt. Die Methode System.identityHashCode() liefert den default hash code wie er durch die Methode Object.hashCode() definiert ist. Für unterschiedliche Referenzen ist der identity hash code unterschiedlich (praktisch immer, aber es kann nicht für alle JVM und Plattformen garantiert werden, man sollte sich also nicht darauf verlassen). Der identity hash code ist aber auf jeden Fall für gleiche Referenzen gleich, das ist garantiert.

        Als Antwort auf die ursprüngliche Frage: Es gibt mit Java-Bordmitteln keine Möglichkeit garantiert die Speicheradresse einer Referenz auszugeben. Die physikalische Speicheradresse kann sich auch während der Lebensdauer eines Objektes ändern (weil die VM Objekte im Speicher verschieben kann), der identity hash code bleibt aber gleich.

        System.out.println(referenz);

        gibt auch nur dann "Klassenname@hashCode" aus, wenn toString() nicht überschrieben wurde. Das ist einfach das default Verhalten von Object.toString(

        Comment


        • #5
          Hallo Holger,

          nein, es gibt keine Möglichkeit, die Referenz als solche auszugeben.
          Egal welche Methode man ausführt, ob hashCode() oder sonst eine, sie bezieht sich immer auf das Objekt, welches die Referenz referenziert.
          Die Referenz selber - in Form einer physikalischen Speicheradresse? - kann man nicht ausgeben.
          Die Verwaltung des Speichers ist in Java abstrahiert, sie wird von der VM übernommen. Als Enwickler muß man (fast) nichts darüber wissen. Als Entwickler hat sozusagen nur Zugriff auf die logische Abbildung.

          In der Hoffnung, geholfen zu haben,
          Stefa

          Comment

          Working...
          X