java—javafx中具有不同指针和相同值的对象数组

oipij1gg  于 2021-07-04  发布在  Java
关注(0)|答案(1)|浏览(392)

这个问题在这里已经有答案了

如何在java中复制对象(23个答案)
4个月前关门了。
我有个问题,我需要一些帮助。
我有一个对象,例如contact,带有string name、string adress和string phone变量
我创建了这个对象的数组

Contact[] homeContacts = new Contact[10];
homeContacts[0] =  new Contact();
...
...
homeContacts[9] =  new Contact();

我像这样填充每个变量

homeContacts[0].name="jim"
homeContacts[0].adsress ="Oak road 52"
homeContacts[0].phone="555-6363633"

我继续使用家庭联系人[1]等等
现在假设我创建了第二个数组联系人[10]

Contact[] workContacts = new Contact[10];
workContacts[0] =  new Contact();
...
...
workContacts[9] =  new Contact();

我将家庭联系人的值大量复制到工作联系人,就像这样

workContacts=homeContacts;

现在,homecontacts数组的每个变量都与workcontacts数组的值具有相同的引用!例如,如果我更改了work homecontacts[0].name=“peter”的名称,它也会更改workcontacts[0].name为peter,但我希望能够在不影响workcontacts的情况下更改homecontacts,如何将homecontacts的值复制到workcontacts,并将其引用到新指针,而不共享相同的值;
先谢谢你

qltillow

qltillow1#

你写道:

and i copy the values of homeContacts to WorkContacts massively like this

workContacts=homeContacts;

这不是一个庞大的副本。。。这只是创建另一个引用 workContacts 指向与 homeContacts 列表。您必须创建所有新对象,才能更改一个列表而不影响另一个列表。
在contact对象中,可以创建一个重载构造函数,该构造函数将另一个contact作为参数,然后将三个属性复制到新创建的对象。然后您可以正确地复制列表:

for (int i=0; i<10; i++) {
  workContacts[i] = new Contact(homeContacts[i]);
}

然后可以对其中一个进行编辑而不影响另一个。
类似地,在将值填充到家庭联系人时,可以对工作联系人执行完全相同的操作,以便同时填充两个列表。

相关问题