指向另一个对象引用的Java对象引用
此类指向另一个对象引用的Java对象引用,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 set
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
即使在引用另一个值为10的整数对象后仍然指向5
区别是因为在第一个示例中,我更改了同一对象的字段,但在第二个示例中,我指向了一个新对象?但如果这是原因的话,那为什么会造成不同呢
区别是因为在第一个示例中,我更改了
相同的对象,但在第二个示例中,我指向一个新对象
对
但如果这是原因的话,那为什么会造成不同呢
因为这样很有用
区别是因为在第一个示例中,我更改了
相同的对象,但在第二个示例中,我指向一个新对象
对
但如果这是原因的话,那为什么会造成不同呢
因为这样很有用?因为在第一个示例中只有一个对象。即使您正在更改x和y的值,它仍然是相同的单个对象 在第二个示例中,有两个对象。我希望下面的图片能把它弄清楚
因为在第一个示例中只有一个对象。即使您正在更改x和y的值,它仍然是相同的单个对象 在第二个示例中,有两个对象。我希望下面的图片能把它弄清楚 您的线路:
i=新整数(10)代码>
将一个全新的对象指定给i,覆盖其以前的值。新对象完全独立于先前由i和a引用的对象。
因此,我不再引用a-i引用的对象,而a引用了完全不同的对象,它们(正如您所期望的)不会相互作用。您的行:
i=新整数(10)代码>
将一个全新的对象指定给i,覆盖其以前的值。新对象完全独立于先前由i和a引用的对象。
因此,我不再引用a-i引用的对象,而a引用的是完全不同的对象(正如您所期望的那样),它们不会相互作用。您能更详细地解释一下吗?开发人员是如何让它以这种方式变得有用的?它给了您一个机会,让您有时拥有不同的对象,这些对象不会被另一个对象上的修改所修改,而这对您是有帮助的。其他时候,代码的其他部分共享一个对象,当他们修改它时,代码的所有其他部分都会考虑这个修改。我仍然想了解这是如何工作的,比如说,在地址级别。您能给我一个Java寻址的概述吗?如果i
是一个指针,它保存第一个整数对象的地址,a
保存i
的地址,那么如果i
中包含的地址发生了变化,那么我认为在通过引用a
获取对象时也应该反映出这种变化。你还没有解释你所说的是如何或为什么起作用的。我觉得你把指针和指针的指针搞混了。在您的示例中,i和a都是Integer类型。他们是同一类型的,没有什么不同。所以他们不会有什么不同。如果一个是指向最终对象的指针,那么另一个也是指向最终对象的指针,而不是指向指针的指针。当i是一个包含整数地址的指针,并且你将i赋值给a,那么a是一个包含与i相同地址的指针。你让它包含和我一样的东西。好的,这很有意义。你能解释得更详细些吗?开发人员是如何让它以这种方式变得有用的?它给了您一个机会,让您有时拥有不同的对象,这些对象不会被另一个对象上的修改所修改,而这对您是有帮助的。其他时候,代码的其他部分共享一个对象,当他们修改它时,代码的所有其他部分都会考虑这个修改。我仍然想了解这是如何工作的,比如说,在地址级别。您能给我一个Java寻址的概述吗?如果i
是一个指针,它保存第一个整数对象的地址,a
保存i
的地址,那么如果i
中包含的地址发生了变化,那么我认为在通过引用a
获取对象时也应该反映出这种变化。你还没有解释你所说的是如何或为什么起作用的。我觉得你把指针和指针的指针搞混了。在您的示例中,i和a都是Integer类型。他们是同一类型的,没有什么不同。所以他们不会有什么不同。如果一个是指向最终对象的指针,那么另一个也是指向最终对象的指针,而不是指向指针的指针。当i是一个包含整数地址的指针,并且你将i赋值给a,那么a是一个包含与i相同地址的指针。你让它包含和我一样的东西。好吧,这是有道理的。我知道Java是按值传递的。据我所知,函数a中的一个变量,当传递给函数B并由函数B在本地操作时,然后在返回B并在a中继续执行后保持其原始值。我认为这些示例可能不同,因为我在第一个示例中关注的问题在调用集合之前不处理值