Java对象引用指向另一个对象引用

标签 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 上调用 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 后仍然指向 5引用另一个值为 10 的 Integer 对象?

差异是因为在第一个示例中我更改了同一对象的字段,但在第二个示例中我指向一个新对象吗?但如果这就是原因的话,为什么会造成差异呢?

最佳答案

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

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

image

关于Java对象引用指向另一个对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54092536/

相关文章:

Java:鼠标点击的快速 2D 点击检测

java - 可扩展 ListView : want to add child list lazy loading under every group

java - 可以从Java中的参数返回值吗?

java - 尝试在 Java Spring API 中实现 Swagger 时出现错误消息

java - 使用数据库函数的JPA查询使用特定索引

java - Elasticsearch映射: is there a disadvantage in using type text for properties which are keyword by nature?

java - 二维数组作为 HashMap 中的值

java - JFrame 留在后台而不是关闭

java - maven构建中找不到资源

Java 8 在一次迭代中求和两个对象属性