该类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 对象?
差异是因为在第一个示例中我更改了同一对象的字段,但在第二个示例中我指向一个新对象吗?但如果这就是原因的话,为什么会造成差异呢?
最佳答案
关于Java对象引用指向另一个对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54092536/