关于Java中别名的问题

时间:2013-12-05 10:41:36

标签: java alias

public class Vector {

    private int x, y, z;

    public Vector(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public void add(Vector v) {
        x += v.x;
        y += v.y;
        z += v.z;
    }

    public void silly(int x, int y, int z) {
        this.x = ++x;
        this.y = y + 1;
        this.z += z;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public int getZ() {
        return z;
    }

    @Override
    public String toString() {
        return "Vector, <x = " + x + ", y = " + y + ", z = " + z + ">";
    }

    public static void main(String[] args) {
        Vector a = new Vector(1, 0, 0);
        Vector b = new Vector(0, 1, 0);
        Vector c = a;
        int x = 1;
        int y = 2;
        int z = 3;
        a.add(b);
        b.add(b);
        c.add(c);
        c.silly(x, y, z);
        System.out.println("a: " + a);
        System.out.println("b: " + b);
        System.out.println("c: " + c);
        System.out.println("x: " + x + "\ty: " + y + "\tz: " + z);
    }
}

我的问题显然不清楚,对不起。我从老师那里得到了这个练习,我应该解释代码中最后4行的输出。我不知道为什么输出看起来像它一样。我不太擅长别名等等。有人可以给我一个解释吗?感谢。

2 个答案:

答案 0 :(得分:1)

Vector c = a;  

表示您创建链接到引用a及其对象的引用。你没有在那里调用构造函数。你不在那里创建任何对象。只是新参考

答案 1 :(得分:1)

我能看到的唯一问题是'向量a和c之间的关系是什么?'所以我会回答这个问题。

当您使用'new'关键字时,您正在创建一个存储在堆中的新对象。所以'a'和'b'是实例化后的两个独立对象。当你说:

Vector c = a;

您不是在堆中创建新对象,只是对同一对象进行新引用。所以现在'a'和'c'都引用相同的东西。如果你改变了,c会改变,反之亦然。

当:

c.add(c);

然后调用c中的int只是被添加到自己。