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行的输出。我不知道为什么输出看起来像它一样。我不太擅长别名等等。有人可以给我一个解释吗?感谢。
答案 0 :(得分:1)
Vector c = a;
表示您创建链接到引用a及其对象的引用。你没有在那里调用构造函数。你不在那里创建任何对象。只是新参考
答案 1 :(得分:1)
我能看到的唯一问题是'向量a和c之间的关系是什么?'所以我会回答这个问题。
当您使用'new'关键字时,您正在创建一个存储在堆中的新对象。所以'a'和'b'是实例化后的两个独立对象。当你说:
Vector c = a;
您不是在堆中创建新对象,只是对同一对象进行新引用。所以现在'a'和'c'都引用相同的东西。如果你改变了,c会改变,反之亦然。
当:
c.add(c);
然后调用c中的int只是被添加到自己。