Rom*_*man 3 java oop variable-assignment
问题的简短版本:
我这样做:x = y.然后我改变了x,并且y没有改变.我想要的是"绑定" x并y以这种方式改变y我改变的方式x.
扩展版本(包含一些细节):
我写了一个类("第一"类),它生成另一个类("第二"类)的对象.更详细地说,第二类的每个对象都有一个名称作为唯一标识符.我使用第二个类中的对象名称调用第一个类的静态方法.第一个类检查是否已生成此类对象(如果它存在于第一个类的静态HashMap中).如果已经存在,则返回.如果还没有,则创建它,添加到HashMap并返回.
然后我有以下问题.在我的程序的某个阶段,我从第一个类的HashMap中获取一个具有特定名称的对象.我对此对象执行某些操作(例如更改某些字段的值).但是HashMap中的对象看不到这些变化!所以,事实上,我没有从HashMap"获取"一个对象,我"创建了这个对象的副本",这是我想要避免的.
添加:
正如答案中提到的那样,我不应该有所描述的行为.而我实际上没有它(我误解了我的程序的行为).我用对象的名字弄错了.我想通过它的名称来引用一个现有的对象,并且我使用了一个错误的名称,所以我实际创建了一个新对象,这就是为什么我没有看到我对旧对象所做的任何更改.
但无论如何,我了解到如果我从HashMap中获取一个对象并对该对象进行一些更改,它们也将应用于HashMap中的"坐"对象.所以,我可以给同一个对象提供不同的引用,我可以使用这些引用中的任何一个来改变对象的状态.
谢谢您的回答.
好吧,你不能别名变量.但是,你应该知道,如果你改变一个对象是由两指x和y,那么这些变化将通过任何一个变量可见.引用类型变量的值是引用,而不是对象本身.
这听起来像这应该是您的情况的情况下-除非你明确地把一些克隆的地方,应该只有实际每名一个对象,你通过一个变量做出该对象的任何变化应通过他人或可见通过地图.对象克隆不仅会自动发生.
我建议你尝试创建一个简短但完整的示例程序来演示这个问题 - 我怀疑在这样做的过程中,你会在你的代码中找到一个解释行为的错误.