Verstehe Lösung einer Aufgabe von "Grundkurs-Java" nicht

pingoo

Mitglied
Hallo allerseits
Die Frage ist, was geschieht wenn der unten angefügte Code ausgeführt wird.
Die Lösung ist : Alles bleibt wie es war.
Nun ich verstehe nicht weshalb die Anweisung copy(p,q); nicht dazu führt dass das Objekt q = p wird, beziehungsweise dessen Inhalt erhält.
Kann mir Jemand den Grund dafür erläutern?

Gegeben ist der folgende Code:

Java:
public class IntKlasse{
   public int a;
   public IntKlasse (int a) {
     this.a = a;
   }
}
public class RefIntKlasse {
   public IntKlasse x;
   public double  y;
   public RefIntKlasse(int u, int v){
     x=new IntKlasse(u);
     y=v;
   }
}
public class KlassenTest {
  
   public static void copy (RefIntKlasse f, RefIntKlasse g){
     g=f;
   }
  
  public static void main (String[] args) {
    RefIntKlasse p= new RefIntKlasse(5,7);
    RefIntKlasse q= new RefIntKlasse(1,2);
    copy(p,q);
    
  }

}
 
Java Parameter werden per call-by-value bereitgestellt. Das heißt der Methode copy werden beide Speicheradressen von RefIntKlasse p, q kopiert übergeben. Darum wird auch q nicht überschrieben (wegen der Kopie der Speicheradresse). Man kann aber trotzdem den internen Zustand der einzelnen Objekte ändern!
 
Danke für die schnelle Antwort 🙂
Ach so das heisst in der Methode copy wird nur mit Kopien von den Objekten p und q gearbeitet, und wenn ich in dieser Methode in der Form p.x bzw. q.x drauf zugreifen würde, würde ich mit den "originalen"(nicht kopierten) Instazvariablen der Objekte arbeiten?
 
Es wird nur die Referenz auf das Objekt kopiert. Wenn du nun in deiner copy funktion g=f machst, dann zeigt eben einfach nur die Referenz nicht mehr auf das alte Objekte, sondern auf das neue.
 

Neue Themen


Zurück
Oben