关于Java中别名的问题 公共类向量{ 私有整数x,y,z; 公共向量(整数x,整数y,整数z){ 这个.x=x; 这个。y=y; 这个。z=z; } 公共空间添加(向量v){ x+=v.x; y+=v.y; z+=v.z; } 公共空间(整数x,整数y,整数z){ 这个.x=++x; 这个。y=y+1; 这个.z+=z; } 公共int getX(){ 返回x; } 公共int getY(){ 返回y; } 公共int getZ(){ 返回z; } @凌驾 公共字符串toString(){ 返回“向量”; } 公共静态void main(字符串[]args){ 向量a=新向量(1,0,0); 向量b=新向量(0,1,0); 向量c=a; int x=1; int y=2; int z=3; a、 添加(b); b、 添加(b); c、 添加(c); c、 傻(x,y,z); 系统输出打印项次(“a:+a”); System.out.println(“b:+b”); System.out.println(“c:+c”); System.out.println(“x:+x+”\ty:+y+”\tz:+z”); } }
我的问题显然不清楚,很抱歉。我从老师那里得到了这个练习,我应该解释代码中最后4行的输出。我不知道为什么输出看起来如此。我不太擅长别名等等。也许有人能给我一个解释?谢谢关于Java中别名的问题 公共类向量{ 私有整数x,y,z; 公共向量(整数x,整数y,整数z){ 这个.x=x; 这个。y=y; 这个。z=z; } 公共空间添加(向量v){ x+=v.x; y+=v.y; z+=v.z; } 公共空间(整数x,整数y,整数z){ 这个.x=++x; 这个。y=y+1; 这个.z+=z; } 公共int getX(){ 返回x; } 公共int getY(){ 返回y; } 公共int getZ(){ 返回z; } @凌驾 公共字符串toString(){ 返回“向量”; } 公共静态void main(字符串[]args){ 向量a=新向量(1,0,0); 向量b=新向量(0,1,0); 向量c=a; int x=1; int y=2; int z=3; a、 添加(b); b、 添加(b); c、 添加(c); c、 傻(x,y,z); 系统输出打印项次(“a:+a”); System.out.println(“b:+b”); System.out.println(“c:+c”); System.out.println(“x:+x+”\ty:+y+”\tz:+z”); } },java,alias,Java,Alias,我的问题显然不清楚,很抱歉。我从老师那里得到了这个练习,我应该解释代码中最后4行的输出。我不知道为什么输出看起来如此。我不太擅长别名等等。也许有人能给我一个解释?谢谢 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; } publi
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);
}
}
表示创建链接到引用a及其对象的引用。你不能在那里调用构造函数。你没有在那里创建任何对象。只是新的参考我能看到的唯一问题是‘向量a和向量c之间的关系是什么?’,所以我会回答这个问题 当您使用“new”关键字时,您正在创建一个存储在堆中的新对象。因此,当“a”和“b”被实例化时,它们是两个独立的对象。当你说:
Vector c = a;
您不是在堆中创建新对象,只是对同一对象进行新引用。所以现在“a”和“c”都是指同一件事。如果你改变a,c也会改变,反之亦然
当:
然后,c中的int被简单地添加到它们自己中。对于我来说,不清楚您“真正不理解”的内容是什么?试着问一个明确的问题:main方法中最后四行的输出是什么?我真的想不起来了。我已经运行了你的代码,一切正常。你的问题是什么?如果你用调试器一步一步地完成这项工作,并在每行之后检查所有对象,你会学到很多东西。非常感谢,非常好的解释@AxelNiklasson不是真的:
a
和c
是对同一对象的两个引用。您既没有编辑a
也没有编辑c
;您正在编辑他们都引用的一个对象。据我所知,您无法编辑/更改/更新引用。您可以更改/编辑对象或其他内容。现在,a和c都链接到同一个对象。如果您更改此对象中的某些内容,a和c都将看到这些更改
Vector c = a;
c.add(c);