关于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中别名的问题 公共类向量{ 私有整数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

我的问题显然不清楚,很抱歉。我从老师那里得到了这个练习,我应该解释代码中最后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;
    }

    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);