èneR: Pointer in Java?

Hallo,
ich habe folgenden Code, der mir "19" ausgibt, statt wie erwartet, "0".
Warum tut er das? Stelle ich mit "a=figs;" eine Art Pointer? Und wenn ja wie unterbinde ich es?

_____________________________________
    public static Figure[] figs = new Figure[6];

public static void main(String[] args) {
        figs[0] = new Figure(1, Color.RED, new Point(0, 0));
        figs[1] = new Figure(2, Color.BLUE, new Point(0, 1));
        figs[2] = new Figure(3, Color.GREEN, new Point(0, 2));
        figs[3] = new Figure(4, Color.YELLOW, new Point(0, 3));
        figs[4] = new Figure(5, Color.WHITE, new Point(0, 4));
        figs[5] = new Figure(6, Color.ORANGE, new Point(0, 5));
        Figure[] a = figs;
        a[0].setX(19);
        System.out.println(figs[0].getX());
    }
_____________________________________
public class Figure {
    int id;
    Color col;
    Point pos;
    public Figure(int id, Color col, Point p) {
        this.col = col;
        this.id = id;
        this.pos = p;
    }

public int getX() {
        return pos.x;
    }

public int getY() {
        return pos.y;
    }

public void setX(int x) {
        pos.x = x;
    }

public void setY(int y) {
        pos.y = y;
    }
[...]
}
_____________________________________

Ich würde mich sehr über eine Antwort freuen, bin fast am verzweifeln!

Grüße,
èneR

  1. Moin,

    warum sollte deiner Meinung nach  System.out.println(figs[0].getX()); 0 liefern?

    In Java sind alle Variablen, die Objekte enthalten Referenzen.
    Daher zeigen figs und a auf das gleiche Objekt bzw. Array von Objekten.

    Wenn du einen Kopie haben willst, musst du das Array bzw. die einzlnen Objekte darin klonen.

    Noch ein Tipp: Arrays sollte man in Java nur in Ausnahmefällen verwenden. Sinnvoller ist es mit Collections, in deinem Fall einer List, zu arbeiten.
    Einen Überblick dazu findest zu z.B. in der Java Insel im Kapitel
    Datenstrukturen und Algorithmen.

    Gruß

    Stareagle

    1. Moin,

      Abend!
      Vielen Dank für die Antwort!

      In Java sind alle Variablen, die Objekte enthalten Referenzen.
      Daher zeigen figs und a auf das gleiche Objekt bzw. Array von Objekten.

      Also war meine ursprüngliche Vermutung richtig.
      Bleibt die Frage wie behebe ich das Problem?

      Wenn du einen Kopie haben willst, musst du das Array bzw. die einzlnen Objekte darin klonen.

      Meinst du => Figure[] a = figs.clone();
      Das verändert das Ergebnis leider nicht.
      Was muss ich also machen, irgendwie hab ich n Brett vorm Kopf :S

      Noch ein Tipp: Arrays sollte man in Java nur in Ausnahmefällen verwenden. Sinnvoller ist es mit Collections, in deinem Fall einer List, zu arbeiten.
      Einen Überblick dazu findest zu z.B. in der Java Insel im Kapitel
      Datenstrukturen und Algorithmen.

      Oh, dankeschön!

      Gruß

      Stareagle

      Greez,
      èneR

      1. Hi,

        Wenn du einen Kopie haben willst, musst du das Array bzw. die einzlnen Objekte darin klonen.
        Meinst du => Figure[] a = figs.clone();
        Das verändert das Ergebnis leider nicht.

        Weil das IIRC ein flat clone ist - es wird zwar das Array geklont, aber nicht die im Array enthaltenen Objekte.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    2. Hello,

      Noch ein Tipp: Arrays sollte man in Java nur in Ausnahmefällen verwenden. Sinnvoller ist es mit Collections, in deinem Fall einer List, zu

      Frage aus Interesse: warum? Komfortabler sind die Datenstrukturen, der Overhead der Verwaltungsmethoden ist sicherlich bei modernen Maschinen vernachlässigbar, aber was spricht gegen ein Array wenn ich fest definierte Zahlen von Elementen habe?

      MfG
      Rouven

      --
      -------------------
      sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
      Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)