Objekte / Referenzen in Java

privacy

Captain
Registriert
Aug. 2004
Beiträge
3.238
Hallo zusammen ich habe eine Frage an euch. Ich denke ich weiss es aber ich bin mir nicht sicher, vielleicht könnt ihr mich verbessern oder bestätigen.

Ich habe folgenden Code:

Code:
String t1 = null;
String t2 = new String("test1");
String t3 = new String("test2");
t1 = t2;
t2 = t3;


Wieviele Objekte habe ich nach ausführen dieses Codes? Ich würde sagen 3 Objekte!
Wieviel Referenzen wurden deklariert? - Ich würde sagen auch 3, da die Objektinhalte für t2 und t3 zwar gleich sind, es aber trotzdem 2 verschiedene Objekte sind.
Und für String mit Inhalt "test1" ist die Referenz jetzt t1.
Ist das richtig so weit oder habe ich doch einen Denkfehler gemacht ?

mfg Denis
 
Hi,
du hast 3 Referenzen aber nur 2 Objekte. Zunächst zeigt t1 auf kein Objekt, t2 und t3 auf die jeweils durch den new Operator erzeugten 2 Objekte. Durch t1=t2 zeigt t1 aber auch auf das gleiche Objekt wie t2. Allerdings legt JAVA beim Manipulieren eines String-Objekts ein neues an:

Code:
String s1 = "hello";
        String s2 = null;
        System.err.println(s1);
        System.err.println(s2);
        s2 = s1;
        System.err.println(s1);
        System.err.println(s2);
        s1 += "!";
        s2 += "?";
        System.err.println(s1);
        System.err.println(s2);

Das ist aber nur bei Strings so, bei anderen Objekten wird das Schreiben auf allen Referenzen auf das entsprechende Objekt sichtbar:

Code:
public class ObjectExample {
    
    protected static int count = 0;
    
    protected int myCount = count;
    
    public ObjectExample() {
        
        myCount = ++count;
        
        System.err.println("constr(): " + this);
        
    }
    
    public void foo() {
        
        myCount *= 10;
        
    }
    
    public static void main(String [] args) {
        
        ObjectExample o1 = null;
        ObjectExample o2 = new ObjectExample();
        ObjectExample o3 = new ObjectExample();
        
        System.err.println("o1 = " + o1);
        System.err.println("o2 = " + o2);
        System.err.println("o3 = " + o3);
        System.err.println();
        
        o1 = o2;
        o2 = o3;
        
        System.err.println("o1 = " + o1);
        System.err.println("o2 = " + o2);
        System.err.println("o3 = " + o3);
        System.err.println();
        
        o3.foo();
        
        System.err.println("o1 = " + o1);
        System.err.println("o2 = " + o2);
        System.err.println("o3 = " + o3);
        System.err.println();                                
        
    }
    
    public String toString() {
        
        return myCount +  " " + Integer.toHexString(hashCode());
    
    }
    
}

Gruß,
stengbiegel
 
Zurück
Oben