此类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
或t
上调用set方法时,在任一指针上调用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
}
}
如果我将一个整数对象引用i
设置为指向值为5的整数对象,然后再对另一个引用a
引用i
,为什么a
即使在我使i
引用另一个值为10的Integer对象之后,仍然指向5?
区别在于,在第一个示例中,我更改了同一对象的字段,但是在第二个示例中,我指向了一个新对象?但是,如果那是原因,那为什么会引起变化呢?
答案 0 :(得分:3)
答案 1 :(得分:0)
有所不同,因为在第一个示例中,我更改了 相同的对象,但是在第二个示例中,我指向一个新的对象?
是
但是如果那是原因,那为什么会引起差异??
因为那样有用?
答案 2 :(得分:0)
您的专线:
i = new Integer(10);
将一个新对象分配给i,覆盖其先前的值。新对象完全独立于先前由i和a引用的对象。
因此,我不再引用由-引用的对象,然后再引用完全不同的对象(如您期望的那样),它们不会相互作用。