两个数组总是相等[关闭]

问题描述 投票:-3回答:2

我有这个代码

for (int i=0; i<tini.length; i++){
    tini[i].tempLabel.setText("Temp: "+ Float.toString(tempArray[i]) +"°" );
    out_status[i] = tini[i].alarm;
    frame.statusLabel.setText("Connetction: OK, String: OK");
}

System.out.println("old: " + Arrays.toString(out_status_old));                  
System.out.println("new: " + Arrays.toString(out_status));
if (Arrays.equals(out_status, out_status_old) ){
    System.out.println("UGUALI");
}

out_status_old = out_status;

结果数组总是相等的。我无法理解原因。在JFrame中使用Button,在GUI界面中我可以修改警报的值,但旧值和实际值同时发生变化!

java arrays equality
2个回答
-1
投票

out_status_old = out_status;不会创建数组的副本。你只有两个变量,out_statusout_status_old,指向同一个数组。

如果要创建阵列的正确副本,可以例如使用Arrays.copyOf(或其变体之一)。


0
投票

当您访问并更新一个数组的元素时,您还要更新另一个数组的元素,因为它们引用了相同的对象。您需要在填充数组时在每个数组中创建单独的项目。

您遗漏了程序的一个重要部分,即实际填充这些数组的位置。可能性是,你没有做深刻的复制。

Deep copy of an object array

© www.soinside.com 2019 - 2024. All rights reserved.