Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA gui:数组被意外修改_Java_Arrays_User Interface - Fatal编程技术网

JAVA gui:数组被意外修改

JAVA gui:数组被意外修改,java,arrays,user-interface,Java,Arrays,User Interface,gui应用程序存在问题,其中对象数组已传递给构造函数,但在初始化新一轮时,它会以某种方式修改const_AnimalFamily数组,我希望在每一轮中保持不变,但此处不能使用final。另一个类初始化这个类,不过这里是我的主要代码。有什么建议吗?谢谢大家! 为什么每次我修改animalFamily时它都会被更改,即使我没有对它做任何修改,const_animalFamily也会受到影响?这是正确的,因为gui应用程序中的对象数组被传递给构造函数,但是当新一轮初始化时,它会以某种方式修改const

gui应用程序存在问题,其中对象数组已传递给构造函数,但在初始化新一轮时,它会以某种方式修改const_AnimalFamily数组,我希望在每一轮中保持不变,但此处不能使用final。另一个类初始化这个类,不过这里是我的主要代码。有什么建议吗?谢谢大家!


为什么每次我修改animalFamily时它都会被更改,即使我没有对它做任何修改,const_animalFamily也会受到影响?

这是正确的,因为gui应用程序中的对象数组被传递给构造函数,但是当新一轮初始化时,它会以某种方式修改const_animalFamily数组,我希望在每一轮都保持不变

请参见以下代码:

 public AnimalGUI(Animal[] temp) {

    System.out.println("INSIDE CONSTRUCTOR");

    const_AnimalFamily = temp;
您正在将const_AnimalFamily的引用更改为temp。所以现在,无论何时从传递temp的位置修改它,都将在常量数组中经历相同的更改

我建议您采取以下措施:

您对临时数组进行深度复制,而不是更改引用


当您传递临时数组时,您传递的是克隆的array.copyOf版本的数组,而不是原始数组。

您的代码太大,无法进行分析。但是,当您声明两个数组将它们的引用分配给字段时,我只是假设您曾经将一个字段分配给另一个字段

事实上,你有一句话:

animalFamily = const_AnimalFamily;
我进一步假设您希望将所有内容从const_AnimalFamily复制到AnimalFamily。但事实并非如此

在Java中,这样的赋值只是将引用分配给变量或字段。这意味着,两个字段现在都引用同一个数组。实际上,以前由字段const_AnimalFamily引用的数组现在已经过时,不能再使用了

例如,如果现在访问某些数组内容

animalFamily[0] = ...
而afterards从

... = const_AnimalFamily[0]
您将获得之前写入数组的相同对象

解决方案:如果确实要复制阵列,请执行以下操作:

animalFamily = Arrays.copyOf(const_AnimalFamily, const_AnimalFamily.length);

另一个更好的解决方案是使用集合。

为了获得更好的响应机会,我建议您将代码范围缩小到可能导致问题的相关区域。如果您确实希望确保阵列不会更改,请考虑使用番石榴的不变式。“有些人抱怨这里没有足够的细节。”达诺。我想知道为什么每次我修改动物家庭时,它都被改变了,即使我没有做任何事情,康斯坦姆的家庭也会受到影响吗?引用SO帮助页面:……但是如果您的问题是您编写的代码,那么您应该包括一些。但不要只是复制整个程序!。。。复制数组确实有效,问题在于链接到同一引用的对象。谢谢你的清楚解释。