1

Java でデータ構造を開発しようとしていますが、解決できない問題に直面しています。オブジェクトへの参照があり、それをコピーした後、コピーのみを使用して元の参照を変更したいと考えています。例えば:

Point a = new Point(0,0);
Point b = a;
b = new Point(5,5);

「a」が「b」だけでなく「new Point(5,5)」も指すようにします。とにかくそれを行うことはありますか?

助けてくれてありがとう。

4

4 に答える 4

4
Point a; // no need to instantiate
Point b = new Point(5,5);
a = b;
于 2013-01-25T10:13:16.053 に答える
2

セッターメソッドを作成すると、次のことが可能になります。

Point a = new Point(0,0);
Point b = a;
//b and a now reference the same point
b.setX(5);
b.setY(5);
//Now we have made changes to the point referenced by b
//Since a references the same point, these changes will
//also apply to a

あなたの例の問題はあなたがしているということですnew Point(x,y)

Point a = new Point(0,0);
Point b = a;
//At this point only one instance of Point exists.
//Both a and b reference the same Point.
//Any change you do to that point will be reflected through both a and b.
b = new Point(5,5);
//Now you have created a second instance of point.
//a and b reference the different points.

したがって、要約すると、既存のポイントを変更することと新しいポイントを作成することと、参照の1つだけに新しいポイントを参照させることの違いを理解する必要があります。

于 2013-01-25T10:20:57.720 に答える
0

Javaではそれができません。Point のラッパーを作成してシミュレートできます。

public class PointWrapper {
    private Point point;

    public PointWrapper(Point point) {
        this.point = point;
    }

    public Point getPoint() {
        return point;
    }

    public void setPoint(Point point) {
        this.point = point;
    }
}

PointWrapper a = new PointWrapper(new Point(0,0));
PointWrapper b = a;
b.setPoint(new Point(5,5));
于 2013-01-25T10:31:00.097 に答える
0

を作成するnew Point(5,5)と、新しい参照が に割り当てられるためb、 と で異なる参照を持つことにaなりbます。

同じインスタンスへの参照を保持し、 への変更が にbも「見える」ようにする唯一の方法aは、元のオブジェクトに新しい値 (5,5) を設定することです (これもAlderathから説明されています)。

b.setX(5);
b.setY(5);
于 2013-01-25T11:14:51.233 に答える