Java 理解程序生命周期中的类引用
我试图理解的是类引用,以及该引用在程序运行的生命周期中是如何变化的。比如说Java 理解程序生命周期中的类引用,java,Java,我试图理解的是类引用,以及该引用在程序运行的生命周期中是如何变化的。比如说 ClassRef ref = new ClassRef(); ref.setVariableOne(1); ref.setVariableTwo(2); 所以我知道这将创建一个名为ref的对象,我可以在我的代码中将它传递到我需要它的地方,我可以使用序列化来保存和加载它,这很好。如果我要创建某种输出,它将显示ref=1,2 但是如果我这么做呢 ArrayList<ClassRef> refArray = ne
ClassRef ref = new ClassRef();
ref.setVariableOne(1);
ref.setVariableTwo(2);
所以我知道这将创建一个名为ref
的对象,我可以在我的代码中将它传递到我需要它的地方,我可以使用序列化来保存和加载它,这很好。如果我要创建某种输出,它将显示ref=1,2
但是如果我这么做呢
ArrayList<ClassRef> refArray = new ArrayList<ClassRef>
refArray.add(ref);
ref.setVariableOne(3);
ArrayList refArray=new ArrayList
重新排列。添加(参考);
参考设定变量一(3);
我已将我的对象添加到数组中,然后更改了其中一个变量,数组中的对象是否也会更新,或者是否在添加时将其“保存”为快照,因此,如果我从数组中输出,它会给出
ref=1,2
,或者它会显示ref=3,2
输出将是ref=3,2
您需要了解的是,当您将ref
添加到refArray
时,您只是将对象的引用(由ref
指向)保留在refArray
列表中
因此,当您从
refArray
检索对象时,也会注意到对原始对象的任何更改。您有这种混淆,因为您将ref
视为对象,而ref
是对对象的引用。更多的
因此,当您将ref
传递给一个方法时,您传递的不是对象,而是对该对象的引用。因此,ArrayList
包含对对象的引用。现在,即使您对对象进行了更改,引用仍保持不变
因此,当您执行ref.setVariableOne(3)
时,不会更改引用。由于引用是我们传递的,所以更改甚至会影响ArrayList
因此,输出将是ref=3,2
我已经将我的对象添加到数组中,然后更改了其中一个变量,数组中的对象是否也会更新,或者是否在添加时将其“保存”为快照,因此如果从数组中输出,它会给出ref=1,2,还是会显示ref=3,2
数组列表中的对象也将改变,因此,它输出ref=3,2
要理解这种行为,您需要了解什么是对象和引用。对象是可以使用new
创建的对象。在此,您创建了一个新对象:
new ClassRef();
请注意,创建对象的过程不包括ClassRef=
部分,因为该部分创建了对对象的引用。该部分表示“ref
现在将引用新创建的ClassRef
对象”
将ref
添加到数组列表时,就是将引用添加到数组列表。因此,现在数组列表中的唯一元素引用了您在第一个数组中创建的对象,即相同的对象ref
引用。请注意,不会创建新对象
当您改变ref
时:
ref.setVariableOne(3);
它变异
ref
所引用的对象,恰好是数组列表中唯一元素所引用的同一个对象。如果您现在执行refArray.get(0)
,这相当于只执行ref
您所说的ClassRef
类是什么?谢谢您,我仍然把我的头包裹在类和物体周围,所以这很有意义。“福克,我想我的答案可以回答你的问题,请考虑通过点击那个标记来接受它。