首页 > 解决方案 > 指向另一个对象引用的 Java 对象引用

问题描述

这个类ds有两个字段,x 和 y

public class ds
{

private int x;
private int y;

public ds(int xx, int yy)
{
    x = xx;
    y = yy;
}

public int getX()
{
    return x;
}

public int getY()
{
    return y;
}

public void setX(int xx)
{
    x = xx;
}

public void setY(int yy)
{
    y = yy;
}

}

此类ptrs用于ds打印结果。我注意到打印输出是相同的,无论int是否Integer用于ds.

public class ptrs
{
public static void main(String[] args)
    {
    ds d = new ds(1,2);

    System.out.println("d.x:" + d.getX()); //1
    System.out.println("d.y:" + d.getY()); //2

    //t is an object reference (a pointer) which points to d, which in turn 
    points to the ds object
    ds t = d;

    System.out.println("t.x:" + t.getX()); //1
    System.out.println("t.y:" + t.getY()); //2

    t.setX(3);
    t.setY(4);

    System.out.println("");

    System.out.println("t.x:" + t.getX()); //3
    System.out.println("t.x:" + t.getY()); //4


    System.out.println("d.x:" + d.getX()); //3
    System.out.println("d.y:" + d.getY()); //4

    d.setX(5);
    d.setY(6);

    System.out.println("");

    System.out.println("d.x:" + d.getX()); //5
    System.out.println("d.x:" + d.getY()); //6

    System.out.println("t.x:" + t.getX());  //5
    System.out.println("t.x:" + t.getY());  //6
    }
}

d当我在or上调用 set 方法时t,在任一指针上调用 get 方法都会导致更新值。为什么在下一个示例中有明显不同的行为?

public class main
    {
    public static void main(String[] args)
        {
        Integer i = new Integer(5);
        Integer a = i;

        System.out.println("i is " + i ); //5
        System.out.println("a is " + a ); //5

        i = new Integer(10);

        System.out.println("i is " + i ); //10 
        System.out.println("a is " + a ); //5
        }
    }

如果我将一个 Integer 对象引用设置i为指向一个值为 5 的 Integer 对象,然后再进行另一个引用a来引用i,为什么a即使我i引用另一个值为 10 的 Integer 对象后仍然指向 5?

区别是因为在第一个示例中我更改了同一对象的字段,但在第二个示例中我指向一个新对象?但是,如果这就是原因,那为什么会引起差异……?

标签: java

解决方案


因为在第一个示例中只有 1 个对象。即使您正在更改 x 和 y 的值,它也是相同的单个对象。

在第二个示例中,有 2 个对象。我希望下面的图片能清除它。

图片


推荐阅读